10 2011 档案

摘要:动机 : 开发应用程序的时候,针对用户接口开发。 业界有许多前辈提出了多种的设计模式,其中最为人所知的就是 MVC模式。MVC模式在实作上有许多种的方法, 不同的开发人员去理解它,都会有不同的理解。 不同的情景需求去套用它,也会有不同的实作。 但不论怎么理解跟实作,它最基本的观念依然都是: 「将系统职责拆解至 Model、View、XXX三种类别,并且定义它们之间的相依关系及沟通方式。」在微软.NET技术架构下,目前最为众人讨论的MVC延伸模式, 应该是适用 WPF、Silverlight、Windows phone平台的 MVVM模式 (Model-View-ViewModel)。 可以说近 阅读全文
posted @ 2011-10-10 10:13 Clark159 阅读(1511) 评论(5) 推荐(1) 编辑
摘要:动机 : 在设计面向对象应用程序架构的时候,对象会包含相关的企业逻辑,而不是单纯的数据对象。但是当企业逻辑需要取得其他对象一起运算,如何「取得」是一件很复杂的事情。例如说:在系统内有一个「查询客户订单总金额」的企业逻辑,需要从系统取出客户的所有订单做金额加总。这个企业逻辑实作上可以分配到不同的对象,这边我们先定义这个企业逻辑是客户对象的职责。并用下列的程序代码,实作这个企业逻辑,这样的范例是可以正常的工作。但是换个场景会发现,在只是要编辑客户电话的时候,也需要取得订单查询接口。当系统越来越庞大,企业逻辑越来越多时,这个范例架构就会显得是个灾难。而且再细看的话会发现订单有参考到客户,这个范例有循 阅读全文
posted @ 2011-10-10 10:11 Clark159 阅读(256) 评论(0) 推荐(0) 编辑
摘要:前言 : 一般使用 BindingSource做 Data Binding的工作,不管是用 ADO.NET对象或是自定义数据对象当作数据源。运作流程大多类似1.读取数据并将数据填写进 DataSet(or BindingList)2.将DataSet(or BindingList)系结至BindingSource3.画面Control触发事件时,操作数据库(or 集合)变更数据,并且操作BindingSource显示数据。这样的运作流程,因为靠画面Control触发的事件,来当作操作函式的进入点。把这样的软件架构,会显得各层之间的职责略显模糊。职责模糊范例程序 : 按此下载using Syst 阅读全文
posted @ 2011-10-10 10:09 Clark159 阅读(1109) 评论(4) 推荐(0) 编辑
摘要:前言 : 在文章「[.NET] : BindingSource使用模式 - Data Binding基础知识 (一)」。介绍了如何将对象的属性包装成属性对象 「PropertyDescriptor」,并用它来做存取、监看变更等工作。将数据对象的属性包装成属性对象是 Data Binding运作基础,在了解这个运作之后。这边再来讨论,Data Binding时会用到的「数据源」。在大部分的书里描述,Data Binding透过 ADO.NET里的对象与数据库做互动,用来显示及存取数据库内的数据。在这架构下,ADO.NET里的物件是一种 Data Binding的数据源。相关资料 : HOW TO 阅读全文
posted @ 2011-10-10 10:08 Clark159 阅读(763) 评论(0) 推荐(0) 编辑
摘要:前言 : 在文章「[.NET] : BindingSource使用模式 - 连动式下拉选单 (纯IDE开发)」。介绍了如何单纯使用Visual Studio的IDE来开发连动式下拉选单。用IDE开发的模式,可以快速建立项目所需的用户接口。但是当我们需要对细节有更高的掌控时,这开发模式会越来越不敷使用。这时就需要改用程序代码开发的模式,来做 Data Binding的开发设计。本篇文章简略介绍,几个设计开发 Data Binding用到的对象。让软件开发人员在设计 Data Binding相关程序代码时,能对对象运作模式有基础的理解。INotifyPropertyChanged :INotify 阅读全文
posted @ 2011-10-10 10:06 Clark159 阅读(634) 评论(0) 推荐(0) 编辑
摘要:前言 :连动式下拉选单想必开发人员都不陌生,用来提供使用者先选祖先元素,再选子项目的数据呈现。如下图 :本篇文章介绍,如何单纯使用Visual Studio的IDE做开发。将数据库里有父子关联的数据,在WinForm上采用连动式下拉选单来做呈现。在接下来的内容里,采用「城镇-乡镇市区」的选择来当作范例。开发出一个可以让使用者选择城镇后,再选择乡镇市区的连动式下拉选单。范例下载 :CascadingDropDownListSample.zip数据结构 :本篇是采用数据库直接当作数据源。数据库名称为CascadingDropDownListDatabase,数据库内共有两个表格[CountyTab 阅读全文
posted @ 2011-10-10 10:05 Clark159 阅读(380) 评论(0) 推荐(0) 编辑
摘要:前言 : 我们在撰写自定义 Configuration时,会先定义好对应的自定义 ConfigurationSection 与 Config档让程序代码知道该如何颇析数据。<sample propertyA="Clark001"> <propertyCollectionB> <add name="Clark002" value="Clark003" /> </propertyCollectionB> </sample>public class SampleSection : 阅读全文
posted @ 2011-10-10 10:03 Clark159 阅读(301) 评论(0) 推荐(0) 编辑
摘要:动机 :前一篇 [Application Architecture] : Entity Expansion模式,介绍了一种扩展对象属性数据的模式。本文延续上一篇的动机,介绍一个Entity Profile模式。 Entity Profile模式主要是定义一组,数据对象(Entity)以及边界对象(Repository)的生成、结构、行为模式,用来扩展对象的属性数据。实作这个模式,可以为系统加入增加式程序代码累积的能力。 基础平台 : 结构 参与者 Page Shell -页面的壳层,可以透过设定数据,动态挂载系统页面的系统。 范例程序 Page Shell依照开发平台的不同,会有不同的选择.. 阅读全文
posted @ 2011-10-10 10:02 Clark159 阅读(326) 评论(0) 推荐(0) 编辑
摘要:动机 : 一个软件系统的生命周期,必然面临到系统改版的问题。而在系统改版的时候,最常遇到的问题之一是,用户希望增加系统对象的数据字段(例如 : 用户数据增加相片)。常见的做法是把相关的功能,从把整个系统从UI到DB重整(重写?)一遍,让用户希望增加至系统的字段,在系统里实现。这样的做法,笔者把它称作『修改式程序代码累积』。所谓的修改式程序代码累积是说,藉由修改经过验证、并且正常运作的程序代码与接口来扩充系统。理论上,程序代码经过修改之后,必须重新执行完整的测试。而接口经过修改,使用手册、教育训练等等,常常也必需做同步的更新。可以说是牵一发动全身。笔者比较喜爱『增加式程序代码累积』。所谓的增加式 阅读全文
posted @ 2011-10-10 10:00 Clark159 阅读(292) 评论(0) 推荐(0) 编辑
摘要:『面向对象的架构』是怎么样的东西,今天忽然顿悟该如何用文字将他定义。将在开发软件项目的时候,遇到的各种不同功能面对象,归类并取一个好记的名字。反复重整功能面对象跟名词,最终就会产生一个属于自己的架构。以DDD(Domain-Driven Design)的Domain Layer来说。1.系统有个User对象。DDD将他归类的成Entities,它的职责就是一个有唯一辨识的对象。2.User要存在储存设备。这个储存设备的功能DDD将它归类成Repository,它的职责就是让Entities可以进出系统边界。3.系统还有一个定时检查User生日发送祝福信件的功能。这个定时执行的功能DDD将他归类 阅读全文
posted @ 2011-10-10 09:59 Clark159 阅读(182) 评论(0) 推荐(0) 编辑
摘要:三层式体系结构里面的"层",其实应该分为Tier跟Layer。这两个中文翻译都是"层",但是他们是相同却有差异的两种"层"。相同的地方在于,将系统依照功能切割为 Presentation、Business Logic、Data Access。差别的地方在于,一个将系统切割成三个子系统(Tier),Presentation Tier、Business Logic Tier、Data Access Tier。一个将系统切割成三个层(Layer) : Presentation Layer、Business Logic Layer、Data 阅读全文
posted @ 2011-10-10 09:58 Clark159 阅读(245) 评论(0) 推荐(0) 编辑
摘要:跟朋友聊天,得知他们公司采用 WebService来做软件架构的分层。这在软件架构上是对的,但执行时容易有一些些的偏差。1. 提供信息的服务器端,WebService的 Function直接捞数据库回传。 WebService里面的 Function做的事只是建立数据联机+取数据,这样其实只是把 Stored Procedures写在程序代码内。 就本质来说还是『捞数据+排版显示』的数据库导向系统,只是把『捞数据』这一段从 Sql改成 WebService而已。 WebService使用的时机,应该是『软件系统提供给其他系统使用的服务』。 这边软件系统的定义是指有自己 Domain know 阅读全文
posted @ 2011-10-10 09:57 Clark159 阅读(345) 评论(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 阅读(369) 评论(0) 推荐(0) 编辑
摘要:前言 :自定义Configuration区段的数据读取,先前小朱有写了一系列的文章。本篇文章描述,如何使用程序代码做自定义Configuration的数据写入。注意 :在 Microsoft Visual Studio IDE除错环境下,执行程序写入.config时。程序写入的将会是*.vshost.exe.config,而不是预期中的 *.exe.config。并且程序执行结束之后,IDE会覆盖*.vshost.exe.config成为写入前的状态。因此会误认为程序执行失败。只要编译完毕之后,点选bin目录底下的*.exe执行。再去检查*.exe.config,就可以看到预期中的结果。相关资 阅读全文
posted @ 2011-10-10 09:54 Clark159 阅读(243) 评论(0) 推荐(0) 编辑
摘要:常常有人用车、汽车、模型车,来解释对象的继承。可是却没有特别解释,是因为上层的程序使用了车,汽车跟模型车是用来抽换的下层。反而去解释,因为汽车跟模型车都有一些共通的功能,所以才用继承。就面向对象语言面来说,这样是正确的。就面向对象设计面来说,这样是误导的。 阅读全文
posted @ 2011-10-10 09:52 Clark159 阅读(137) 评论(0) 推荐(0) 编辑
摘要:前言 :上一篇文章:[ASP.NET] : 可抽换式验证来源 (LDAP验证、Windows验证...)介绍了如何使用自制CLK.Web函式库,实现ASP.NET可抽换式验证来源。所谓的可抽换式验证,就是说可以依照需求不同。采用AD验证使用者、DB验证使用者、或其他验证来源。本篇文章介绍如何实作验证来源,文章实做的验证来源为数据库类型的数据源。实作 :档案下载 : CLK.Web.Security.rar1. 开启CLK.Web.Security方案2. 加入新项目CLK.Web.Security.Extension3.新专案CLK.Web.Security.Extension加入参考4. 加 阅读全文
posted @ 2011-10-10 09:51 Clark159 阅读(220) 评论(0) 推荐(0) 编辑
摘要:动机 :在设计面向对象应用程序架构的时候,关联的对象进出 Data Access Layer(DAL)是一件很复杂的事情。Entity Framework是一种解决方案的选择,但是它包装了太多用不习惯的功能。例如对象的变更追踪同步这类的功能,一般开发程序的时候主要是新增修改删除查询,很少去处理到追踪同步。本文介绍一个轻量级的边界模式,将它架构在Business Logic Layer(BLL)里。让DAL层,只专注处理永续储存的数据。让BLL层,能简单处理对象与对象关联,方便建立不贫血的对象。结构 :参与者 :User- 被关联的对象,UserID是这个对象的索引值。UserGroup- 包含 阅读全文
posted @ 2011-10-10 09:50 Clark159 阅读(279) 评论(0) 推荐(0) 编辑
摘要:前言 :本文纪录如何使用自制CLK.Web函式库,实现ASP.NET可抽换式验证来源。所谓的可抽换式验证,就是说可以依照需求不同。采用AD验证使用者、DB验证使用者、或其他验证来源。下面炼结提供的档案内,已经实作完成Windows验证、LDAP验证。有兴趣的朋友,可以自行实作DB验证及其他。(文章范例采用Windows验证)使用范例 :档案下载 : CLK.Web.Security.rar1. 建立ASP.NET专案2. 加入CLK及CLK.Web参考3. 加入Global.asax并且修改4. 加入Web.config并且修改。采用Windows验证,并且拒绝匿名用户。如果要改用LDAP对A 阅读全文
posted @ 2011-10-10 09:48 Clark159 阅读(308) 评论(0) 推荐(0) 编辑
摘要:前言 :WinForm窗体的多线程开发,有其特定的写法。在非WinForm窗体线程外的线程,控制WinForm窗体上的对象将会引发错误。网络上可以找到很多种的写法,让多线程去跨线程控制WinForm窗体对象。本章采用匿名函式的方式实作这个功能,以提供不同的选择。线程相关数据可以参考 - [Object-oriented] : 线程范例窗体 :button1 : ButtontextBox1 : TextBox范例程序 :private void button1_Click(object sender, EventArgs e){ // 纪录 WinForm SyncContext ... 阅读全文
posted @ 2011-10-10 09:46 Clark159 阅读(472) 评论(0) 推荐(0) 编辑
摘要:前言 :参加点部落的活动,关于IoC(控制反转)大家有很多的讨论。本文排除对象生成的部份,单纯解释IoC为甚么叫做控制反转。本篇文章以之前写的 [Object-oriented] : 重用内容来举例。未IoC之前的对象图 :很明显的左边的组件A,相依右边的组件B。左边的对象,相依右边的对象public class Robot{ private Car _car = null; public Robot(Car car) { _car = car; } public void Work() { _car.Run(); }}pu... 阅读全文
posted @ 2011-10-10 09:43 Clark159 阅读(248) 评论(0) 推荐(0) 编辑
摘要:前言 :VS2010内建了测试项目,本篇文章说明测试项目的生命周期。生命周期图 :生命周期范例 :[TestClass]public class UnitTest1{ [AssemblyInitialize()] public static void AssemblyInitialize(TestContext context) { MessageBox.Show("AssemblyInitialize"); } [ClassInitialize()] public static void ClassInitialize(TestContext... 阅读全文
posted @ 2011-10-10 09:26 Clark159 阅读(370) 评论(1) 推荐(0) 编辑
摘要:前言 :面向对象设计守则里有一条:多用合成,少用继承。 面向对象设计守则的内容可以参考, [深入浅出设计模式] : http://www.oreilly.com.tw/product_java.php?id=a163 本篇文章示范如何实作界面、抽象类的抽象合成,让合成之后的类别依然保有抽象方法。使用时机 :当有一堆抽象类,想要集合成一个大的抽象类时使用。 例如说 现在要实作Facade这个模式 可是有些抽象对象的方法,要让使用者去实作。 这个时候,抽象合成就可以派上用场。结构 :实作 :首先先要有一个抽象类public abstract class Strategy{ public in... 阅读全文
posted @ 2011-10-10 09:25 Clark159 阅读(201) 评论(0) 推荐(0) 编辑
摘要:Builder 是用于对象内部,功能对象的抽换。 Factory 是提供外部对象,抽换对象的功能。 阅读全文
posted @ 2011-10-10 09:23 Clark159 阅读(220) 评论(0) 推荐(0) 编辑
摘要:前言 :应用程序在Vista或是Win7上执行时,有时会有权限不足的问题。 简单的解法是请用户在应用程序图标上右键单击,然后选择以系统管理员身分执行。 但这个动作常常会被使用者忘记。这个问题在VS2008或是VS2010上已经有了解决方案 : (请参考) http://social.msdn.microsoft.com/Forums/zh-TW/1007/thread/ce70e22d-45f7-4903-b8f4-76a159d3002d http://www.dotblogs.com.tw/jjnnykimo/archive/2009/05/08/8346.aspx http://www. 阅读全文
posted @ 2011-10-10 09:22 Clark159 阅读(277) 评论(0) 推荐(0) 编辑
摘要:实作 :1. 建立Windows应用程序项目 2. 建立数据对象 *建立完毕,先建置方案一次。 3. 建立数据源 4. 建立报表 5. 系结报表数据源 *从右边数据源,拖曳数据字段至报表 6. 建立报表窗体 *选择报表后会自动建立TestDataBindingSource7. 建立报表数据 8. 捡视报表 阅读全文
posted @ 2011-10-10 09:20 Clark159 阅读(329) 评论(0) 推荐(0) 编辑
摘要:前言 :说到「面向对象程序设计」跟「结构化导向程序设计」两者之间的不同。常常会提到一点 :「面向对象程序设计程序代码比较容易重用」。 面向对象程序设计的前辈工程师,总结了很多经验写下了Design Patterns以及其他很多的数据文献。 让后续的工程师在重用程序代码的时候,有一些模式可以使用,而不用再去自己创造。 这大大增加了面向对象重用的机会,这类文章网络上已经有很多,这边就不赘述。 本篇从广义的抽象概念,来阐述面向对象的重用概念。说明 :「结构化导向程序设计」在重用的这个领域上,主要是使用「Library」来当作重用的方式。 「面向对象程序设计」在重用的这个领域上,除了沿用结构化导向程序 阅读全文
posted @ 2011-10-10 09:17 Clark159 阅读(196) 评论(0) 推荐(0) 编辑
摘要:昨天跟朋友哈拉打屁,引发了一些想法 :「程序设计有分深度跟广度」。 程序设计的深度,指的是技术背后的精神与实现。 程序设计的广度,指的是技术工具的使用与应用。当一个新技术发表,两个不同角度的人一起去看。 最终的结果都是能掌握,但在的路途上却是分歧的。 以ASP.NET MVC来说 : 从深度去看,看到的是。MVC的精神是甚么、微软怎么实现MVC架构。 从广度去看,看到的是。ASP.NET MVC有哪些方法可以用、在项目上怎么应用。这又延伸出了一个问题,一项技术该学到甚么程度。 从深度去看,学习掌握。深入了解核心精神、怎么实现的手法。就算懂了,剩下的实做时候再去翻数据。 从广度去看,学习掌握。深 阅读全文
posted @ 2011-10-10 09:16 Clark159 阅读(169) 评论(0) 推荐(0) 编辑
摘要:程序设计这件事本质上: 就是在无数工程师创造的世界规则上,建立属于自己的作品。 在CPU的世界上,建立汇编语言。 在HTTP通讯协议的世界上,建立网页程序。 在Microsoft的世界上,使用.NET开发程序。 ...就整个程序设计来说,有太多规则需要去学习体会。 不是每一条规则,都需要去透彻的了解才能写出程序。 掌握规则的程度高低,却是决定了功力高低的指标。 就像是开车的人不一定会修车、赛车手比一般人更会用车。随着程序设计的世界在进步,规则一层一层的架上去。 却有越来越多工程师,不去学习工具背后所隐藏的规则。 这不是一件坏事,这是高度抽象化的成果。 而且毕竟人的精力有限,开发出程序能收钱就好 阅读全文
posted @ 2011-10-10 09:15 Clark159 阅读(201) 评论(0) 推荐(0) 编辑
摘要:前言 :在面向对象的程序开发设计上,我们常常强调重用与抽换 : 重用核心的程序代码,抽换特定的模块。但是大多的面向对象的书,只有介绍重用与抽换的理论,并没有介绍实做的时候该怎么写。因为实际开发系统,要完成重用与抽换。牵扯到系统设计、动态加载、Config管理......等等方方面的知识。真的要解释起来,需要的篇幅会是很大一篇。本篇的文章跳过这些复杂的理论面,逐步解说如何实做微软提供的Provider Pattern来实现对象的抽换。Provider Pattern提供了,使用App.config或是web.config来做储存装置,并且实做了对象抽换的功能。依照本篇的模块去做面向对象开发设计的 阅读全文
posted @ 2011-10-10 09:13 Clark159 阅读(306) 评论(0) 推荐(0) 编辑
摘要:前言 :线程 在面向对象里是很少被讨论到的东西。 不是因为面向对象没有用到线程,而是因为线程是面向对象底层的程序设计的内容。 或者是换个角度说。线程是所有程序设计开发应该懂的内容,开发出来的程序都是在线程上面执行。 笔者试着从计算器物理层面,来解释线程的运作。单线程 :在[Object-oriented] 相关系列的文章中,已经阐述过, 程序的执行时其实是, 可以这样理解 :程序代码在内存内,然后由计算机一行一行去执行。 这一行一行执行串联起来的动作,其实就是所谓的线程。 也就是说图中红线的部分就是最简单的单线程。多线程 :多线程主要是用在有些时候很多工作要一起执行,而不是执行完一个在去执行下 阅读全文
posted @ 2011-10-10 09:12 Clark159 阅读(184) 评论(0) 推荐(0) 编辑
摘要:前言 :之前发布了一篇[ASP.NET] : HierarchicalObjectDataSource 本篇是它的Part2,内容没有新的东西。 只是把上一篇发表的对象,套用一些Design Patterns。 来达到异种数据的数据系结。一般写ASP.NET使用TreeView,大多使用XmlDataSource或是SiteMapDataSource做数据系结,不然就是依照数据去程序动态建立TreeNode。 HierarchicalObjectDataSource 封装了阶层式数据系结的复杂运算,让TreeView的数据系结开发变的可行。 依照这两篇HierarchicalObjectDat 阅读全文
posted @ 2011-10-10 09:10 Clark159 阅读(207) 评论(0) 推荐(0) 编辑
摘要:前言 :ASP.NET 3.5提供了,网页上常使用到的树状选单TreeView。 可是TreeView的数据系结,并没有支持ObjectDataSource。 这篇文章分享如何实做ObjectDataSource,来支持TreeView的数据系结功能。分析设计 :TreeView的DataSource只支持实做IHierarchicalDataSource接口的对象。 IHierarchicalDataSource这个看似简单的接口,里面却包含了很多子界面。 将整个IHierarchicalDataSource拆解开来,并且经过分析设计之后的对象图如下 :每个对象的职责就不赘述了,大多为符合I 阅读全文
posted @ 2011-10-10 09:09 Clark159 阅读(258) 评论(0) 推荐(0) 编辑
摘要:前言 :几乎所有的系统,都一定会有数据新增、修改、删除、查询的功能(CRUD)。 在ASP.NET里撰写CRUD有很多种的实作方式,例如使用GridView就可以简单实作完成。 这样的写作方式是把CRUD的职责,绑定在控件上。 当我们要做修改的时候,只能选择控件提供的方式,或是特殊方法才能满足客户的要求。本篇文章描述,撰写CRUD的一种模式。 将CRUD的职责拆解成一个一个的页面,单一页面只要负责单一的职责。 拆解完的CRUD职责不是绑在控件而是绑在页面上,能比较方便的做修改来满足客户要求。页面流程 :先从整个页面流程看起,下图为整个模式使用的页面流程图。 一共分为六个页面,其职责为 : -L 阅读全文
posted @ 2011-10-10 09:07 Clark159 阅读(500) 评论(0) 推荐(0) 编辑
摘要:前言 :写程序难免,会遇到要使用自定义函式来作对象数组转型。 写了一个对象来做这个动作,跟大家分享。说明 :这个对象的特点为: 1. 使用到才转型。不会在内存,建立整个转型后的数组副本。 2. 可在转型时加入参数。使用范例 :namespace CLK.Collections.ConsoleApplication{ public class User { public string LastName = string.Empty; public string FirstName = string.Empty; } public class D... 阅读全文
posted @ 2011-10-10 09:04 Clark159 阅读(170) 评论(0) 推荐(0) 编辑
摘要:前言 :接口 是在面向对象里,是个不难懂,却是很重要的东西。 笔者试着采用指标的方式,来解释接口的运作。接口 :底下是一段接口的程序代码 这个程序代码很简单,就是ClassA实作ISampleX而已public interface ISampleX{ void XXX(); void YYY();}public class ClassA : ISampleX{ public void XXX() { // ... } public void YYY() { // ... } public void ZZZ() ... 阅读全文
posted @ 2011-10-10 09:02 Clark159 阅读(232) 评论(0) 推荐(0) 编辑
摘要:前言 :继承 是面向对象初学者,学完之后。觉得懂却又有点模糊的东西 笔者试着用展开程序代码的方式,来解释继承的运作。继承 :底下是一段继承的程序代码 这个程序代码很简单,就是ClassB继承ClassA而已namespace ConsoleApplication1 { public class ClassA { public void XXX() { // ClassA Code } private void YYY() { // ClassA Code ... 阅读全文
posted @ 2011-10-10 08:59 Clark159 阅读(210) 评论(0) 推荐(0) 编辑
摘要:前言 :对象与类别 这两个是面向对象初学者,很容易混淆的东西。 笔者试着从计算器物理层面,来解释对象与类别的不同。说明 :不管是面向对象程序或是结构化程序, 执行程序的时候。 计算机作的事情是 : 把执行文件的档案加载到内存并且一行一行执行。 加载到内存的档案,这个我们姑且就叫他 : 「程序代码」面向对象程序程序代码的单位,是以类别为单位。 也就是说,面向对象程序代码加载到内存里面,我们可以把它看成一块一块的区段。 这个区段就是说我们常听到的「类别」。 可以想象成这样 : 程序代码加载到内存内之后, 计算机就会从Main(),开始一行一行执行程序代码。 当计算机执行程序到 Product X 阅读全文
posted @ 2011-10-10 08:56 Clark159 阅读(165) 评论(0) 推荐(0) 编辑
摘要:前言 :上篇发表之后 朋友们的反应,大多是说太抽象了,好像啥都没讲。 其实观念的东西真的就是抽象,本质真的就是简单两字而已。呵呵~说的有点多了, 这第二篇主要是补充一个实作的例子, 看会不会比较那么虚无飘渺噜。架构 :蓝色框框代表一个独立的DLL 特别标明出来是要传达, 数据存取层的接口定义是跟逻辑层绑在一起的 数据存取层的实作成是是相依于逻辑层内的数据存取层接口常常工程师在设计软件的时候 会写成 : 逻辑层==>数据存取层 建议的作法是 : 逻辑层(数据存取接口<=)=数据存取层 把相依的方向改变,这是面向对象设计中一个很重要的观念。范例 :namespace Clark.Exa 阅读全文
posted @ 2011-10-10 08:52 Clark159 阅读(233) 评论(0) 推荐(0) 编辑
摘要:前言 :一般说到应用程序架构 大家最容易联想的应该就是「三层式体系结构」 但笔者所要讨论的应用程序架构 抽象逻辑上是架构在三层式体系结构的上一层 针对软件设计所规划的应用程序架构 相关数据可以参考 : 微软文件「.NET 的应用程序架构:设计应用程序和服务」 本篇将焦点放在「数据存取层」简介 :所有的程序都离不开数据存取。 「数据存取层」所定义的就是将数据的存取,与应用程序的逻辑分开。动机 :开发应用程序有时会遇到变更数据库的需求, 例如将数据库从SQL换到Oracle。遇到这种问题 比较常碰到的解法是,把与SQL数据库沟通的程序代码跟SQL语句,改成Oracle。 甚至高深一点的会将SQL语 阅读全文
posted @ 2011-10-10 08:50 Clark159 阅读(275) 评论(0) 推荐(0) 编辑
摘要:前言 :处理AD数据的时候 常常会需要取得用户的Domain\User数据 可是用户的AD属性却没有这个数据 本篇文章的程序示范,如何取得用户的Domain\User。实作 :using System;using System.Collections.Generic;using System.Text;using System.DirectoryServices;using System.Security.Principal;namespace ConsoleApplication1{ class Program { static void Main(string[]... 阅读全文
posted @ 2011-10-10 08:49 Clark159 阅读(278) 评论(0) 推荐(0) 编辑
摘要:问题 :依照微软技术支持服务这篇文章 如何在 Visual Basic.NET 或 Visual Basic 2005 建立安装项目的 Windows 服务http://support.microsoft.com/kb/317421/zh-tw 建立Windows Service的安装项目 安装之后在计算机的服务里,找不到安装的服务解法 :第一种 : 手动执行 installutil.exe 第二种 : 在安装项目建立自定义动作,项目选择 Windows Service项目的主要输出。 以上两种解法都可以将Windows Service安装在目标计算机上 阅读全文
posted @ 2011-10-10 08:46 Clark159 阅读(154) 评论(0) 推荐(0) 编辑
摘要:前言 :一般在监控文件夹或是档案异动,大多使用FileSystemWatcher类别 但FileSystemWatcher在监控档案建立的事件时 他发出的 Created事件的时间点,是在档案建立开始的当时,而不是档案建立完毕的时间点。 如果直接使用的话,有时会造成建立档案的线程跟监控档案的线程互相冲突 造成『由于另一个进程正在使用档案』的例外产生。改为本篇文章介绍的使用方法及可避免上述问题实作 :using System; using System.Collections.Generic; using System.Text; using System.IO; namespace Cons. 阅读全文
posted @ 2011-10-10 08:44 Clark159 阅读(197) 评论(2) 推荐(0) 编辑

点击右上角即可分享
微信分享提示