摘要:
接续...[Architecture Pattern] Device Projection 模式 (上)实做 :范列下载 :DeviceProjectionSample点此下载范列逻辑 :下面图片是范例程序执行的结果。主要的参与者有:LightDevice.exe -仿真远程设备的程序,采用TCP联机连接LightMaster。 -窗体上灯号数据的图像,可透过右侧灯号按钮做开关。 -窗体上灯号数据的图像,接受LightMaster传送来的指令做开关。 -每300ms会将灯号数据传送到LightMaster。LightMaster.exe -映像远程设备的程序,采用TCP联机聆听LightDev 阅读全文
摘要:
动机 : 开发实时系统的时候,常常需要建立一组对象,用来映像远程设备。 透过这组对象呈现远程设备的状态、通知。 使用这组对象封装远程设备的操作、管理。但在映像远程设备提供上述功能之前。 还需要提供探索远程设备的功能,建立远程设备列表。 这样才能完整的提供服务。本文介绍一个『Device Projection 模式』, 定义对象之间的职责跟互动,用来封装映射远程设备所需要提供的功能。 让开发人员在需要实做相关功能时,能有一个参考的架构。结构 : 下图是这个模式的示意图,整个看起来有点复杂。 我们将图拆解开来说明,会比较方便了解。 Device相关对象 : 首先是Device相关对象,这组对象主要 阅读全文
摘要:
前言 :Log4net是一个很方便用来做Log的第三方软件。 但在输出讯息的部分,却很吊诡的「部分支持」输出 Tab符号(Tab Character)。 所谓的「部分支持」是说, 在讯息内容的部分有支持,但是讯息Layout的部分不支持。 这让开发人员做讯息排版的时候,受到很大的限制。本篇文章记录, 如何在使用Log4net输出Log讯息的时候,能够让支持 Tab符号(Tab Character)。 希望能帮助有需要的开发人员。实做 :实做的方式,主要是使用 Log4net自定义参数的功能, 加入自定义的 Tab符号(Tab Character),来达成支持讯息输出 Tab符号(Tab Cha 阅读全文
摘要:
前言 :看到91跟小朱都分享了,延迟执行的文章。 - 91 : [.NET]延迟执行(Deferred Execution) 简单概念实作 - 小朱 :[.NET] LINQ 的延迟执行 (Deferred Execution) 唤醒了许久之前的记忆,记得也有对LINQ的运作下了一番功夫。 趁记忆还没有消失。简单的做个记录,也希望对有需要的开发人员有帮助。说明 :简单的说,在 Linq的延迟执行运作,主要有三个要点。 1. IEnumerable跟 foreach是 LINQ运作的核心。 2. IEnumerable套用 Decorator模式,对IEnumerable加入功能。 3. 使用. 阅读全文
摘要:
前言 : 最近在处理应用程序安装的相关问题。 系统内有使用Window Time Service来完成时间同步的功能。但在启动这个服务的时候。 却发现使用ManagementObject Class控制 WMI的这种方式, 无法将Windows Service启动类型设定为「自动(延迟开始)」。使用Google搜寻之后, 找到了可以使用 Windows SC命令,来做Windows Service的管理。 并且这个方式,可以将Windows Service启动类型设定为「自动(延迟开始)」。本篇文章简单纪录, .NET应用程序如何使用Windows SC命令,来做Windows Service 阅读全文
摘要:
前言 : 最近为了多执行绪程序分享数据集合,搞的焦头烂额。 主要的问题点卡在, 当有一条执行绪使用 foreach列举数据集合的时候,另外一条执行绪去变更数据集合。 这时候会发生Exception,通知说在列举的同时数据集合被变更。当下最先想到的解决方案是,使用lock在读写数据集合的时候做锁定。 这样的确可以解决问题, 但是因为不论读写都先lock,这样会降低程序执行的效能。 并且这样的写法,要求使用数据集合的程序代码必须要记得做lock动作,不然会发生错误。上网搜寻到这篇「再谈程序多任务(III)─执行绪安全与数据集合」,刚好解决了我遇到的问题点。:D整篇文章主要的思路就是, ... 阅读全文
摘要:
动机 : 开发应用程序的时候,针对用户接口开发。 业界有许多前辈提出了多种的设计模式,其中最为人所知的就是 MVC模式。MVC模式在实作上有许多种的方法, 不同的开发人员去理解它,都会有不同的理解。 不同的情景需求去套用它,也会有不同的实作。 但不论怎么理解跟实作,它最基本的观念依然都是: 「将系统职责拆解至 Model、View、XXX三种类别,并且定义它们之间的相依关系及沟通方式。」在微软.NET技术架构下,目前最为众人讨论的MVC延伸模式, 应该是适用 WPF、Silverlight、Windows phone平台的 MVVM模式 (Model-View-ViewModel)。 可以说近 阅读全文
摘要:
动机 : 在设计面向对象应用程序架构的时候,对象会包含相关的企业逻辑,而不是单纯的数据对象。但是当企业逻辑需要取得其他对象一起运算,如何「取得」是一件很复杂的事情。例如说:在系统内有一个「查询客户订单总金额」的企业逻辑,需要从系统取出客户的所有订单做金额加总。这个企业逻辑实作上可以分配到不同的对象,这边我们先定义这个企业逻辑是客户对象的职责。并用下列的程序代码,实作这个企业逻辑,这样的范例是可以正常的工作。但是换个场景会发现,在只是要编辑客户电话的时候,也需要取得订单查询接口。当系统越来越庞大,企业逻辑越来越多时,这个范例架构就会显得是个灾难。而且再细看的话会发现订单有参考到客户,这个范例有循 阅读全文
摘要:
前言 : 一般使用 BindingSource做 Data Binding的工作,不管是用 ADO.NET对象或是自定义数据对象当作数据源。运作流程大多类似1.读取数据并将数据填写进 DataSet(or BindingList)2.将DataSet(or BindingList)系结至BindingSource3.画面Control触发事件时,操作数据库(or 集合)变更数据,并且操作BindingSource显示数据。这样的运作流程,因为靠画面Control触发的事件,来当作操作函式的进入点。把这样的软件架构,会显得各层之间的职责略显模糊。职责模糊范例程序 : 按此下载using Syst 阅读全文
摘要:
前言 : 在文章「[.NET] : BindingSource使用模式 - Data Binding基础知识 (一)」。介绍了如何将对象的属性包装成属性对象 「PropertyDescriptor」,并用它来做存取、监看变更等工作。将数据对象的属性包装成属性对象是 Data Binding运作基础,在了解这个运作之后。这边再来讨论,Data Binding时会用到的「数据源」。在大部分的书里描述,Data Binding透过 ADO.NET里的对象与数据库做互动,用来显示及存取数据库内的数据。在这架构下,ADO.NET里的物件是一种 Data Binding的数据源。相关资料 : HOW TO 阅读全文
摘要:
前言 : 在文章「[.NET] : BindingSource使用模式 - 连动式下拉选单 (纯IDE开发)」。介绍了如何单纯使用Visual Studio的IDE来开发连动式下拉选单。用IDE开发的模式,可以快速建立项目所需的用户接口。但是当我们需要对细节有更高的掌控时,这开发模式会越来越不敷使用。这时就需要改用程序代码开发的模式,来做 Data Binding的开发设计。本篇文章简略介绍,几个设计开发 Data Binding用到的对象。让软件开发人员在设计 Data Binding相关程序代码时,能对对象运作模式有基础的理解。INotifyPropertyChanged :INotify 阅读全文
摘要:
前言 :连动式下拉选单想必开发人员都不陌生,用来提供使用者先选祖先元素,再选子项目的数据呈现。如下图 :本篇文章介绍,如何单纯使用Visual Studio的IDE做开发。将数据库里有父子关联的数据,在WinForm上采用连动式下拉选单来做呈现。在接下来的内容里,采用「城镇-乡镇市区」的选择来当作范例。开发出一个可以让使用者选择城镇后,再选择乡镇市区的连动式下拉选单。范例下载 :CascadingDropDownListSample.zip数据结构 :本篇是采用数据库直接当作数据源。数据库名称为CascadingDropDownListDatabase,数据库内共有两个表格[CountyTab 阅读全文
摘要:
前言 : 我们在撰写自定义 Configuration时,会先定义好对应的自定义 ConfigurationSection 与 Config档让程序代码知道该如何颇析数据。<sample propertyA="Clark001"> <propertyCollectionB> <add name="Clark002" value="Clark003" /> </propertyCollectionB> </sample>public class SampleSection : 阅读全文
摘要:
动机 :前一篇 [Application Architecture] : Entity Expansion模式,介绍了一种扩展对象属性数据的模式。本文延续上一篇的动机,介绍一个Entity Profile模式。 Entity Profile模式主要是定义一组,数据对象(Entity)以及边界对象(Repository)的生成、结构、行为模式,用来扩展对象的属性数据。实作这个模式,可以为系统加入增加式程序代码累积的能力。 基础平台 : 结构 参与者 Page Shell -页面的壳层,可以透过设定数据,动态挂载系统页面的系统。 范例程序 Page Shell依照开发平台的不同,会有不同的选择.. 阅读全文
摘要:
动机 : 一个软件系统的生命周期,必然面临到系统改版的问题。而在系统改版的时候,最常遇到的问题之一是,用户希望增加系统对象的数据字段(例如 : 用户数据增加相片)。常见的做法是把相关的功能,从把整个系统从UI到DB重整(重写?)一遍,让用户希望增加至系统的字段,在系统里实现。这样的做法,笔者把它称作『修改式程序代码累积』。所谓的修改式程序代码累积是说,藉由修改经过验证、并且正常运作的程序代码与接口来扩充系统。理论上,程序代码经过修改之后,必须重新执行完整的测试。而接口经过修改,使用手册、教育训练等等,常常也必需做同步的更新。可以说是牵一发动全身。笔者比较喜爱『增加式程序代码累积』。所谓的增加式 阅读全文