摘要:
在设计对象继承的时候,父对象建构子会需要一些参数,这些参数可以由子对象建构子透过base关键词来提供。namespace Test001{ public class ParentClass { // Constructors public ParentClass(IEnumerable<string> dataCollection) { this.DataCollection = dataCollection; } // Properties public IEnumerabl... 阅读全文
摘要:
动机在设计系统架构的时候,在系统里加入Dependency Injection(DI),让系统可以在不改变程序代码的状况下,抽换类别来提高重用性、扩充性。在.NET里可以选择一些的Framework来使用,例如:Spring Framework、Unity Application Block、Managed Extensibility Framework (MEF)。在一些中小型项目,套用上列这些Framework,常常会有种拿大炮打蚊子的感觉。因为这些Framework为了能够符合更多的使用情景,而加入了很多功能。一直加下去的结果,就是系统变的庞大并且较难理解上手。以Spring来说,光是怎 阅读全文
摘要:
动机一个软件系统的开发,Log是一个不可或缺的功能。不管是做问题的追查、或是状态的分析,有了Log的辅助能让开发人员有迹可循。而这些Log功能的实作模块,开发人员可以选用.NET内建的EventLog、或者是第三方的Log4net….等等来使用。有这么多种的实作模块可以使用,简化了开发人员的工作量,但是也带来了另外一个问题:「系统增加了对Log实作模块的相依」。假设我们现在开发一个User模块,这个模块使用了EventLog来完成Log功能。经过长时间的验证后,确认了User模块的稳固以及强大。现在有另一个项目需要使用User模块相关的功能,而这个项目则是使用Log4net来完成Log功能。这 阅读全文
摘要:
通勤时看小说「数字风暴」,里面有一段话很有趣。程序员的成长固然和经验和熟练度有关,但到了一定的境界,熟练度这回事越来越无关紧要了。决定一个程序员的水平的,是想象力,是数学、物理等方面的功底、是对计算机的最底层的东西的洞察。 忽然有感悟,学会了OOP、OOA、DDD、TDD等等技能,学会这些就跟画家学会用各种颜料来作画一样,不过只是基础。要如何运用这些基础技能,解决真实世界的问题,努力成为某个领域的专家,建立起自己的风格、自己的道路。我想这是每个开发人员,有一天都需要面对、思考的问题。 阅读全文
摘要:
目标提供开发人员简单方便的硬件状态监控平台。架构图重点设计采用Zookeeper的运作逻辑 1. Server端Keeper维护由Client端Author Publish过来的Device。2. Server端Keeper定时移除一段时间内没有Client端Author Heartbeat 的De... 阅读全文
摘要:
目标开发人员只要设计合约类别,就可以跟硬件建立联机、交换讯息。架构图重点设计采用WCF的ABC设定 1. Host启动Binding。2. Binding使用Addrerss建立Connecter用来跟硬件联机。3. Binding使用Connecter建立的硬件联机,透过CodeDOM建立实作IC... 阅读全文
摘要:
在WindowForm应用程序中主要的线程,是采用一种称为「Single-Threaded Apartment(STA)」的线程模型。这个STA线程模型,在线程内加入了讯息帮浦等等机制,减少开发人员撰写窗口程序的工作量。相关的信息可以参考:[Object-oriented] 线程。而在开发类别库的时候,如果要使用类似的STA线程模型,可以使用下列的程序代码提供的类别来完成。namespace CLK.Threading{ public class STAThread { // Enum private enum ThreadState { ... 阅读全文
摘要:
做软件架构设计的时候,三层式体系结构是一个很常套用的分层模式。三层式体系结构中会将系统切割成为:PL(Presentation Layer)、BLL(Business Logic Layer)、DAL(Data Access Layer)。在这其中BLL是整个系统的系统核心,而DAL则是数据对象进出系统的系统边界。本篇文章讨论实作系统时,系统核心与系统边界之间的架构如何设计,才能提高内聚、减少耦合。我们先假设系统设计时,将BLL、DAL各自独立为一个DLL。而BLL里有Control对象操作Object对象、ObjectReposository对象用来提供功能给PL使用、DAL里则有Objec 阅读全文
摘要:
当我们在使用RDLC开发报表的时候,如果数据源内容如下。private List<UserData> CreateDataSet(){ List<UserData> userDataSet = new List<UserData>(); userDataSet.Add(new UserData() { Name = "Clark", Age = 18 }); userDataSet.Add(new UserData() { Name = "Yaya", Age = 15 }); return userDataSet;} 阅读全文
摘要:
最近的项目使用Oracle DB。在.NET里可以使用Oracle Client,来对Oracle DB下SQL指令。写了下面的程序代码,用来取得User数据表里的User数据。using (OracleConnection connection = new OracleConnection(connectionString)){ connection.Open(); using (OracleCommand command = new OracleCommand()) { command.Connection = connection; comm... 阅读全文
摘要:
这篇文章用来记录重构系统架构时,遭遇到的问题内容,以及当下处理的解决方案。应该会不定时更新 XD2012/07/03命名规则定义问题内容 : 命名规则没有标准化规范,维护程序代码困难。解决方案 : 采用微软标准命名规则,提高程序代码质量。系统架构分层问题内容 : 架构分层不明确职责散落各处,容易改东坏西。解决方案 : 架构分层重新设计,一层一层分离职责。系统架构模块问题内容 : 架构模块不明确职责散落各处,容易改东坏西。解决方案 : 系统模块重新设计,一块一块分离职责。系统架构通讯问题内容 : UI逻辑紧密相依WCF,必须要整套系统架起来除错,增加除错困难。解决方案 : 采用IoC切割通讯职责 阅读全文
摘要:
在撰写程序的时候,错误处理是一件很重要的事情。在「C++编程规范」这本书的第71个条款里,依照不同的错误处理结果,定义出三种「安全保证」等级: No-fail保证、Strong保证、Basic保证。这三种安全保证等级以执行方法遇到错误并且处理之后,是否会影响到数据或状态来做等级区分。开发人员在撰写每个方法之前,先决定方法的错误处理是属于哪个等级,可以减少思考的范围、避免一些不必要的过度设计。No-fail保证所谓的「No-fail保证」是说:执行方法一定成功、不会发生异常。在系统里有些方法,必须设计为提供No-fail保证等级,例如:解构子、资源释放、Log纪录…等等。这些方法通常会在错误处理 阅读全文
摘要:
今天去面试,面试官希望我多聊一些有关架构设计,当场回答了一些部落格上分享的架构模式。回家的路上,认真的思考了这个问题:「架构设计是做甚么?」对我来说,架构是用来处理软件系统上的各种非功能性需求。不管是增加系统的扩充性、降低开发人员的最低能力、减少维护人员的负担,都是架构设计该处理的问题。以部落格上写过的架构模式来说:「Database Migration」抽象化数据库部属升级,减少维护数据库的成本。「Repository」抽象化系统储存装置,增加系统可移植性。「Device Projection」抽象化设备管理功能,聚焦开发人员的思考逻辑。这些架构模式,处理各种面向的问题,内容包山包海。但能. 阅读全文
摘要:
接续...[Architecture Pattern] Database Migration (上)实作范列下载实作说明请参照范例程序内容:DatabaseMigrationSample点此下载范列实作首先建立封装数据库更新逻辑的DatabaseUpdater,以及定义DatabaseUpdater会使用到的各个接口。执行DatabaseUpdater的Update方法,系统会依照数据库更新逻辑,执行对应的DatabaseUpdatePlan。并且反复执行,直到数据库版本为目前DatabaseUpdatePlan能更新的最新版本。public interface IDatabaseVersio 阅读全文
摘要:
动机在软件项目的生命周期里,每次做软件版本的修改,难免会去修改到数据库的Schema。针对这种数据库版本的变更,一般的做法会在版本控制系统(SVN)里,存放生成数据库的SQL脚本文件案。在每个软件版本的释出时间点,开发人员会依照当时的数据库,建立数据库生成SQL脚本文件案并存入SVN。这样安装人员只要取得SVN某个软件版本的执行文件,以及对应版本的数据库生成SQL脚本文件案,就可以为客户完成安装部属的工作。这样的架构模式,遇到旧版本系统要升级为新版本系统的时候。安装人员会需要:将旧版本的数据保留、建立新版本数据库、将旧版本的数据汇入新版本系统数据库。完成这些升级数据库的系统操作,需要一定程度的 阅读全文