随笔分类 -  Architecture Pattern

摘要:[Architecture Pattern] Factory Builder目的同时提供延迟注入对象、挂载注入项目这两个功能情景在开发系统时,如果需要在运行时间才生成并注入对象,可以套用Factory模式来提供延迟注入对象功能。例如:一个监控系统在火警发生时,建立功能对象来启动相关设备(洒水设备、警... 阅读全文
posted @ 2015-01-17 10:31 Clark159 阅读(234) 评论(0) 推荐(0) 编辑
摘要:[Architecture Pattern] Singleton Locator目的组件自己提供Service Locator模式,用来降低组件的耦合度。情景在开发系统时,底层的Infrastructure Context、或是核心的Domain Context这些共享对象生成之后,会在系统的许多地... 阅读全文
posted @ 2014-06-15 20:30 Clark159 阅读(200) 评论(0) 推荐(0) 编辑
摘要:[Architecture Pattern] Repository实作查询功能范例下载范例程序代码:点此下载问题情景在系统的BLL与DAL之间,加入Repository Pattern的设计,能够切割BLL与DAL之间的相依性,并且提供系统抽换DAL的能力。但在软件开发的过程中,套用Reposito... 阅读全文
posted @ 2014-05-05 00:22 Clark159 阅读(968) 评论(1) 推荐(1) 编辑
摘要:动机一个软件系统的开发,Log是一个不可或缺的功能。不管是做问题的追查、或是状态的分析,有了Log的辅助能让开发人员有迹可循。而这些Log功能的实作模块,开发人员可以选用.NET内建的EventLog、或者是第三方的Log4net….等等来使用。有这么多种的实作模块可以使用,简化了开发人员的工作量,但是也带来了另外一个问题:「系统增加了对Log实作模块的相依」。假设我们现在开发一个User模块,这个模块使用了EventLog来完成Log功能。经过长时间的验证后,确认了User模块的稳固以及强大。现在有另一个项目需要使用User模块相关的功能,而这个项目则是使用Log4net来完成Log功能。这 阅读全文
posted @ 2012-09-02 20:08 Clark159 阅读(776) 评论(0) 推荐(0) 编辑
摘要:接续...[Architecture Pattern] Database Migration (上)实作范列下载实作说明请参照范例程序内容:DatabaseMigrationSample点此下载范列实作首先建立封装数据库更新逻辑的DatabaseUpdater,以及定义DatabaseUpdater会使用到的各个接口。执行DatabaseUpdater的Update方法,系统会依照数据库更新逻辑,执行对应的DatabaseUpdatePlan。并且反复执行,直到数据库版本为目前DatabaseUpdatePlan能更新的最新版本。public interface IDatabaseVersio 阅读全文
posted @ 2012-06-20 01:47 Clark159 阅读(913) 评论(0) 推荐(0) 编辑
摘要:动机在软件项目的生命周期里,每次做软件版本的修改,难免会去修改到数据库的Schema。针对这种数据库版本的变更,一般的做法会在版本控制系统(SVN)里,存放生成数据库的SQL脚本文件案。在每个软件版本的释出时间点,开发人员会依照当时的数据库,建立数据库生成SQL脚本文件案并存入SVN。这样安装人员只要取得SVN某个软件版本的执行文件,以及对应版本的数据库生成SQL脚本文件案,就可以为客户完成安装部属的工作。这样的架构模式,遇到旧版本系统要升级为新版本系统的时候。安装人员会需要:将旧版本的数据保留、建立新版本数据库、将旧版本的数据汇入新版本系统数据库。完成这些升级数据库的系统操作,需要一定程度的 阅读全文
posted @ 2012-06-20 01:45 Clark159 阅读(1212) 评论(2) 推荐(1) 编辑
摘要:动机Service Locator是一个在开发系统时,很常用的一个模式。在Martin Fowler写的Inversion of Control Containers and the Dependency Injection pattern里,可以发现这个Pattern的身影。Service Locator最主要是定义BLL层内对象生成、对象存放、对象取得的职责,让系统在取得对象时不需要知道对象是如何生成及存放,有效降低系统的耦合性。同时学习Service Locator,也为架构设计带入了空间的概念。在设计架构的时候,可以套用Service Locator来做为架构空间的封装。将经对象生成建 阅读全文
posted @ 2012-05-21 08:12 Clark159 阅读(1377) 评论(5) 推荐(0) 编辑
摘要:动机Repository Pattern是一个在开发系统时,很常用的一个模式。在一些大师的著作:不管是在Martin Fowler所写的PoEAA或者是Eric Eban著作的DDD里,都有出现这个Pattern的身影。Repository Pattern最主要是定义如何切割BLL层跟DAL层之间的相依性,让BLL层不用依赖于DAL层的实做。并且在有需要更换DAL目标的时候,可以有抽换DAL层的能力。同时学习Repository Pattern,也为架构设计带入了边界的概念。在设计架构的时候,可以套用Repository Pattern来做为架构边界的封装。将外部的系统、模块、数据库…等等,隔 阅读全文
posted @ 2012-04-29 20:38 Clark159 阅读(1656) 评论(2) 推荐(0) 编辑
摘要:动机 :Plugin是在软件系统内增加功能的功能。 如果在软件系统加入Plugin功能,能提高软件系统的重用性。加入Plugin功能的软件系统在开发完成之后。 如果需要额外加入功能,不用变更已完成的软件系统就能加入新功能。 并且因为不用变更已完成的软件系统,也就避免了修改软件系统会产生的风险。另外在系统里加入Plugin功能,其实会遇到一个问题。 当有多个Plugin内容加入系统的时候,该如何去识别与取得加入的Plugin内容。本文介绍一个『Service Plugin 模式』, 定义对象之间的职责跟互动,用来实现Plugin提供的功能,并且封装Plugin内容识别与取得的职责。 为自己做个纪 阅读全文
posted @ 2012-02-17 13:09 Clark159 阅读(1242) 评论(0) 推荐(0) 编辑
摘要:动机 :在开发与数据库沟通的系统时,因为建立数据库联机是比较昂贵的。 所以ADO.NET在背后帮开发人员,实做了 ConnectionPool的机制。 将系统内建立的数据库联机做快取,当系统要使用时就直接使用快取联机,避免了每次都建立新数据库联机的花费。 并且实际上在使用ADO.NET时,开发人员对于背后的ConnectionPool机制其实是无感的。 要让开发人员无感,可是又能完成快取的功能,这真的要花一点工夫去设计。本文介绍一个『Singleton Pool模式』。 定义对象之间的职责跟互动,用来建置类似ConnectionPool功能的对象池功能,并且提供开发人员无感的使用界面。 为自己 阅读全文
posted @ 2012-02-10 08:04 Clark159 阅读(1258) 评论(2) 推荐(1) 编辑
摘要:接续...[Architecture Pattern] Device Projection 模式 (上)实做 :范列下载 :DeviceProjectionSample点此下载范列逻辑 :下面图片是范例程序执行的结果。主要的参与者有:LightDevice.exe -仿真远程设备的程序,采用TCP联机连接LightMaster。 -窗体上灯号数据的图像,可透过右侧灯号按钮做开关。 -窗体上灯号数据的图像,接受LightMaster传送来的指令做开关。 -每300ms会将灯号数据传送到LightMaster。LightMaster.exe -映像远程设备的程序,采用TCP联机聆听LightDev 阅读全文
posted @ 2012-02-02 13:33 Clark159 阅读(986) 评论(0) 推荐(1) 编辑
摘要:动机 : 开发实时系统的时候,常常需要建立一组对象,用来映像远程设备。 透过这组对象呈现远程设备的状态、通知。 使用这组对象封装远程设备的操作、管理。但在映像远程设备提供上述功能之前。 还需要提供探索远程设备的功能,建立远程设备列表。 这样才能完整的提供服务。本文介绍一个『Device Projection 模式』, 定义对象之间的职责跟互动,用来封装映射远程设备所需要提供的功能。 让开发人员在需要实做相关功能时,能有一个参考的架构。结构 : 下图是这个模式的示意图,整个看起来有点复杂。 我们将图拆解开来说明,会比较方便了解。 Device相关对象 : 首先是Device相关对象,这组对象主要 阅读全文
posted @ 2012-01-28 23:46 Clark159 阅读(1211) 评论(2) 推荐(1) 编辑
摘要:动机 : 开发应用程序的时候,针对用户接口开发。 业界有许多前辈提出了多种的设计模式,其中最为人所知的就是 MVC模式。MVC模式在实作上有许多种的方法, 不同的开发人员去理解它,都会有不同的理解。 不同的情景需求去套用它,也会有不同的实作。 但不论怎么理解跟实作,它最基本的观念依然都是: 「将系统职责拆解至 Model、View、XXX三种类别,并且定义它们之间的相依关系及沟通方式。」在微软.NET技术架构下,目前最为众人讨论的MVC延伸模式, 应该是适用 WPF、Silverlight、Windows phone平台的 MVVM模式 (Model-View-ViewModel)。 可以说近 阅读全文
posted @ 2011-10-10 10:13 Clark159 阅读(1508) 评论(5) 推荐(1) 编辑
摘要:动机 : 在设计面向对象应用程序架构的时候,对象会包含相关的企业逻辑,而不是单纯的数据对象。但是当企业逻辑需要取得其他对象一起运算,如何「取得」是一件很复杂的事情。例如说:在系统内有一个「查询客户订单总金额」的企业逻辑,需要从系统取出客户的所有订单做金额加总。这个企业逻辑实作上可以分配到不同的对象,这边我们先定义这个企业逻辑是客户对象的职责。并用下列的程序代码,实作这个企业逻辑,这样的范例是可以正常的工作。但是换个场景会发现,在只是要编辑客户电话的时候,也需要取得订单查询接口。当系统越来越庞大,企业逻辑越来越多时,这个范例架构就会显得是个灾难。而且再细看的话会发现订单有参考到客户,这个范例有循 阅读全文
posted @ 2011-10-10 10:11 Clark159 阅读(251) 评论(0) 推荐(0) 编辑
摘要:动机 :前一篇 [Application Architecture] : Entity Expansion模式,介绍了一种扩展对象属性数据的模式。本文延续上一篇的动机,介绍一个Entity Profile模式。 Entity Profile模式主要是定义一组,数据对象(Entity)以及边界对象(Repository)的生成、结构、行为模式,用来扩展对象的属性数据。实作这个模式,可以为系统加入增加式程序代码累积的能力。 基础平台 : 结构 参与者 Page Shell -页面的壳层,可以透过设定数据,动态挂载系统页面的系统。 范例程序 Page Shell依照开发平台的不同,会有不同的选择.. 阅读全文
posted @ 2011-10-10 10:02 Clark159 阅读(324) 评论(0) 推荐(0) 编辑
摘要:动机 : 一个软件系统的生命周期,必然面临到系统改版的问题。而在系统改版的时候,最常遇到的问题之一是,用户希望增加系统对象的数据字段(例如 : 用户数据增加相片)。常见的做法是把相关的功能,从把整个系统从UI到DB重整(重写?)一遍,让用户希望增加至系统的字段,在系统里实现。这样的做法,笔者把它称作『修改式程序代码累积』。所谓的修改式程序代码累积是说,藉由修改经过验证、并且正常运作的程序代码与接口来扩充系统。理论上,程序代码经过修改之后,必须重新执行完整的测试。而接口经过修改,使用手册、教育训练等等,常常也必需做同步的更新。可以说是牵一发动全身。笔者比较喜爱『增加式程序代码累积』。所谓的增加式 阅读全文
posted @ 2011-10-10 10:00 Clark159 阅读(285) 评论(0) 推荐(0) 编辑
摘要:动机在设计面向对象应用程序的时候,简单的分层会将系统分为Presentation Layer(PL)、 Business Logic Layer(BLL)、Data Access Layer(DAL)。但是三层之间的对象生成、依赖注入等等的设计会是一件很复杂的事情。例如:PL对象该怎么去生成BLL的对象、DAL的对象该怎么注入BLL。本文介绍一个简单的Context模式,用来框出一个面向对象应用程序的架构,让每一层的对象设计有可循的规范。结构参与者 UserReportPage-用户接口,呈现用户数据的报表。-使用ContextContainer的静态属性取得Context。-使用Contex 阅读全文
posted @ 2011-10-10 09:55 Clark159 阅读(364) 评论(0) 推荐(0) 编辑
摘要:动机 :在设计面向对象应用程序架构的时候,关联的对象进出 Data Access Layer(DAL)是一件很复杂的事情。Entity Framework是一种解决方案的选择,但是它包装了太多用不习惯的功能。例如对象的变更追踪同步这类的功能,一般开发程序的时候主要是新增修改删除查询,很少去处理到追踪同步。本文介绍一个轻量级的边界模式,将它架构在Business Logic Layer(BLL)里。让DAL层,只专注处理永续储存的数据。让BLL层,能简单处理对象与对象关联,方便建立不贫血的对象。结构 :参与者 :User- 被关联的对象,UserID是这个对象的索引值。UserGroup- 包含 阅读全文
posted @ 2011-10-10 09:50 Clark159 阅读(269) 评论(0) 推荐(0) 编辑