随笔分类 -  设计----架构设计

摘要:浅谈命令查询职责分离(CQRS)模式在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。虽然在DB上可以做一些读写分离的设计,但在业务上如果在读写... 阅读全文
posted @ 2015-07-15 14:28 awp110 阅读(292) 评论(0) 推荐(0)
摘要:本系列的第一篇博文抛砖引玉,大谈领域驱动设计的优势,这里笔者还是希望以客观的态度,谈谈领域驱动设计的缺点及其不适合使用的场景,以让读者可以有选择性的使用领域驱动设计。 我们知道,没有最好,只有最合适,设计也是一样。因此,所谓设计,就是以你和你的团队的知识、经验和智慧,全面充分的考虑各种内外因素后,... 阅读全文
posted @ 2015-06-03 08:42 awp110 阅读(290) 评论(0) 推荐(0)
摘要:曾经参与过系统维护或是在现有系统中进行迭代开发的软件工程师们,你们是否有过这样的痛苦经历:当需要修改一个Bug的时候,面对一个类中成百上千行的代码,没有注释,千奇百怪的方法和变量名字,层层嵌套的方法调用,混乱不堪的结构,不要说准确找到Bug所在的位置,就是要清晰知道一段代码究竟是做了什么也非常困难。... 阅读全文
posted @ 2015-06-03 08:41 awp110 阅读(286) 评论(0) 推荐(0)
摘要:上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章开始,笔者将会结合自己的实际经验,谈及领域驱动设计的应用。本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重... 阅读全文
posted @ 2015-06-03 08:41 awp110 阅读(311) 评论(0) 推荐(0)
摘要:软件系统面向对象的设计思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为面向对象语言的基础。随着编程语言和技术的发展,各种语言特性层出不穷,面向对象是大部分语言的一个基本特性,像C++、Java、C#这样的静态语言,Ruby、Python... 阅读全文
posted @ 2015-06-01 09:02 awp110 阅读(268) 评论(0) 推荐(0)
摘要:原文发布于2013年12月6日 工作地点转换成家中后,最近都没什么心情写博客了(好吧我承认是我懒)。之前的几篇都比较水,今天来个(对于我来说)难度略高的内容吧。 这次想讨论的话题是有关领域驱动设计,和领域驱动设计中使用贫血、失血or充血模型的。在这之前我想讨论下当前很多应用的问题,想起这个话题的... 阅读全文
posted @ 2015-05-18 09:17 awp110 阅读(310) 评论(0) 推荐(0)
摘要:1IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确... 阅读全文
posted @ 2014-12-18 08:37 awp110 阅读(172) 评论(0) 推荐(1)
摘要:http://www.cnblogs.com/liping13599168/archive/2011/07/16/2108209.htmlAutofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的。于是,今天抽空研... 阅读全文
posted @ 2014-09-07 16:11 awp110 阅读(280) 评论(0) 推荐(0)
摘要:在上一篇中,我简单介绍了下Autofac的使用,有人希望能有个性能上的测试,考虑到有那么多的IOC框架,而主流的有:Castle Windsor、微软企业库中的Unity、Spring.NET、StructureMap、Ninject等等。本篇文章主要针对这些IOC框架编写测试程序。Autofac下... 阅读全文
posted @ 2014-09-07 16:10 awp110 阅读(319) 评论(1) 推荐(0)
摘要:http://www.cnblogs.com/Terrylee/archive/2006/04/28/387503.htmlCastle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。4月份以来,Terrylee写了一系列的Castle的文章,这里做一下总结,后续还有Facility系列等,本部分内容会不断的更新。第一部分:ActiveRecord学习实践系列1.Castle ActiveRecord学习实践(1):快速入门指南 2.Castle Acti 阅读全文
posted @ 2012-07-12 15:32 awp110 阅读(193) 评论(0) 推荐(0)
摘要:一叶障目.NET平台上的分层架构(很多朋友称其为“三层架构”),似乎是一个长盛不衰的话题。经常看到许多朋友对其进行分析、探讨、辩论甚至是抨击。笔者在仔细阅读了大量这方面文章后,认为许多朋友在分层架构的理解上存在两个比较大的偏颇:1.没有从本质角度去理解分层的内涵,而只是了解其表象。2.对分层架构的理解过于狭隘,只是少数概念,而又不够深入。许多朋友言“分层”则必称“DAL”、“BLL”、“表示层”等概念,殊不知“DAL”的内部还有“Data Source 架构模式”、“Object-Relational Behavioral 模式”、“Object-Relational Structural 模 阅读全文
posted @ 2011-04-25 19:10 awp110 阅读(209) 评论(0) 推荐(0)
摘要:视频网站可以分为两类核心业务:视频上传和视频播放。 视频上传<!--[if !vml]--><!--[endif]--> 从上传到发布视频的时间可能会比较长,尤其是遇到大视频,转换服务器的压力会比较大,内部传输的带宽消耗比较多,这个给用户的体验会比较差。在产品,技术和服务上要多考虑怎么满足用户的“快”感。这是一个系统工程,不仅仅是产品技术的问题,还有... 阅读全文
posted @ 2009-08-22 15:12 awp110 阅读(379) 评论(0) 推荐(0)
摘要:问题由来最近在研究适合团队开发的web架构解决方案,该架构即要适合分工协作又要有一定扩展性,适合不同的数据库需要,因此我查阅了一些资料,初步构想出了一套架构,请各位多多指教。探索web开发架构最经典莫过于三层架构,表示层、逻辑层、数据处理层。数据访问层:其功能主要是负责数据库的访问。 业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。 表示层:是系统的UI部分,负责使用者与整个系统的交... 阅读全文
posted @ 2009-08-05 09:26 awp110 阅读(225) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/haozi0804/archive/2009/07/31/1535524.html第一章 简单的开始本章我们从一个简单的项目开始,一个基于NHibernate2.1数据库O/R Mapping工具的简单编程实例,来说明即使我们使用了O/R Mapping工具仍然有可能会把程序写成没有层次结构和杂乱无章。不是说这样的看上去简单的结构不是好结构,正如很多程... 阅读全文
posted @ 2009-07-31 11:17 awp110 阅读(261) 评论(0) 推荐(0)
摘要:前一段时间负责负责论坛的迁移工作,对其架构进行了简单的整理。前几天看到有人说discuz的介绍很少,因此整理了一下,发布出来。 也是第一次发表文章,大侠们手下留情。Discuz整体架构如下图所示:横向表示 同一层次中涉及的各个模块(项目)纵向表示 不同层次之间模块的关系,某些关系是如何在各层次中传递(穿越) Discuz架构上采用了比较流行的三层架构,即表现层,业务逻辑层,数据访问层来进行设计,并... 阅读全文
posted @ 2009-05-24 14:18 awp110 阅读(436) 评论(1) 推荐(0)
摘要:设想这样一个需求,我们需要为自己的框架提供一个负责排序的组件。目前需要实现的是冒泡排序算法和快速排序算法,根据“面向接口编程”的思想,我们可以为这些排序算法提供一个统一的接口ISort,在这个接口中有一个方法Sort(),它能接受一个object数组参数。对数组进行排序后,返回该数组。接口的定义如下: public interface ISort { ... 阅读全文
posted @ 2009-03-19 10:10 awp110 阅读(203) 评论(0) 推荐(0)
摘要:考虑一个日志记录工具。目前需要提供一个方便的日志API,使得客户可以轻松地完成日志的记录。该日志要求被记录到指定的文本文件中,记录的内容属于字符串类型,其值由客户提供。我们可以非常容易地定义一个日志对象: public class Log { public void Write(string target, string log) { //实现内容; } }... 阅读全文
posted @ 2009-03-19 10:09 awp110 阅读(211) 评论(0) 推荐(0)
摘要:六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心。正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的。一件交付给客户使用的产品,如果在用户界面(User Interface,UI)上缺乏吸引人的特色,界面不友好,操作不够体贴,即使这件产品性能非常优异,架构设计合理,业务逻辑都满足了客户的需求,却仍然难以讨得客户的欢心。... 阅读全文
posted @ 2009-03-19 10:03 awp110 阅读(208) 评论(0) 推荐(0)
摘要:五 PetShop之业务逻辑层设计 业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,我们也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Appl... 阅读全文
posted @ 2009-03-19 10:02 awp110 阅读(166) 评论(0) 推荐(0)
摘要:四 PetShop之ASP.NET缓存 如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的。在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术。因为Cache的存取速度比内存快,因而引入Cache能够有效的解决CPU与内存之间的速度不匹配问题。硬件系统可以利用Cache存储CPU访问概率高的那些数据,当CPU需要访问这些数据时,可以... 阅读全文
posted @ 2009-03-19 10:01 awp110 阅读(172) 评论(0) 推荐(0)