随笔分类 - [20]DesignAnalysis设计分析
-
面向领域驱动架构的查询实现方式
摘要:在上一篇文章《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个在面向领域驱动架构的实践中比较常见的问题:“DDD使用聚合根访问,那例如那些通用查询如何实现?难道都要经过聚合根多步得到么?DDD如何实现关联表的查询,例如3表关联查询?”这个问题比较泛,涉及的内容也比较多,我就单独一篇文章介绍一下我对这个问题的看法。关于上面问题中的“通用查询”- 呃,这个定义比较模糊,我只能给出我的一些想法或者经验性的东西,我在本文中的经验与观点并不一定会100%适合您的应用场景,但我想应该还是具有一定指导性意义的。聚合与聚合根我想,还是从聚合根谈起吧。聚合根是DDD中的概念,不管是经典的DD 阅读全文
-
淘宝数据结构来看电子商务中商品属性设计
摘要:前言 那个啥…前面发了2篇文章讲这个商品表的设计,后面越多需求浮出水面才发现设计依旧有问题,好吧,乐观一点,正如我博客的标题一样,我在进化…^_^为什么要这样设计先说几个需求,看看您现在是如何去实现:一个用户来到我们网站,在前台页面,1.他要买洗发水,他进入了洗发水的类别,他想买带去屑止痒功效的500ml的洗发水,能否直接搜索出来所有品牌带这个功效属性是500ml的洗发水2.接着他要买一件T恤,他想买V领,短袖的T恤,能否直接通过2个属性搜索出所有品牌的T恤展示给他3.他进入一个T恤的详情页面,由于白色卖的比较好,所以白色会比其他颜色贵一些,所以他选择不同颜色+不同尺码的搭配,就会显示出不同的 阅读全文
-
.NET简谈策略模式
摘要:策略模式在我们日常开发中经常被用到,这篇文章不是策略模式的深入讨论和学术研究,只是让初学者能有个基本的了解。什么叫策略:1. 可以实现目标的方案集合;2. 根据形势发展而制定的行动方针和斗争方法;3. 有斗争艺术,能注意方式方法。什么叫模式:模式(Pattern)其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。什么叫策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使 阅读全文
-
C#插件开发简单模型
摘要:一、前言插件模型指应用程序由一些动态的独立模块构成,每个模块均具有一个或多个服务,并满足一定的插件协议,能够借助主程序实现主程序-插件,插件-插件之间的通讯。它定义了一套公共的接口,通过接口与插件进行通信,主要是通过反射来获取相关的属性和方法,然后再执行指定的操作。其实,它也可以理解为定义一套通用的解决方案,通过反射来获取相应的程序集的相关类型,然后执行这些指定类型的相关操作。它是一种即插即用的方案,更新及维护简便。本文仅仅是描述插件开发的大体模型,设计比较简单,主要的步骤如下:(1)、定义公共的接口以及抽象类。(2)、定义和实现相关组件。(3)、实现通用程序集反射操作类。其中,公共的接口和抽 阅读全文
-
构建企业内部的管理系统
摘要:构建企业内部的管理系统我以前呆过几家公司,每个公司都有自己的特色,根据不同的需要,我觉得在中小型企业中可以实施以下一些管理系统,来提高公司的管理效率人事管理:管理公司的员工资料库,招聘等物品管理:公司有些公用物品,方面用户借用,但这些东西还是弄个平台管理几来比较好考试系统:这个系统,我觉得用上比较好,有一次,我进一个公司,每天就是学习公司的规章制度,还要考试,这种方式不错,也可以作为新来员工的学习平台图书管理:这个系统在做技术的公司差不多都有,很早以前我在的一家公司是用Access来做管理,后来以前公司都有这方面的应用,为了方便员工的学习,还是用上吧考勤管理:这个重要性就不要说了,有点模式的公 阅读全文
-
业务逻辑的方法(事务脚本、Evans DDD、基于事件驱动的设计)
摘要:废话不多说了,本文的目的是希望通过一个“银行转账”的例子来和大家分享一些我最近学习到的关于如何组织业务逻辑的心得和体会。当然,本人的能力和领悟有限,如有不正确之处,还希望各位看官能帮我指出来。我始终坚持一个信念,没有讨论就没有进步,任何一个非盈利为目的的人或组织始终应该把自己所学的知识共享出来与人讨论,这样不管对自己或对他人或对整个社会都大有好处。因为一个人的知识毕竟是有限的,但可以(并且也只能)和别人相互沟通交流学习来弥补这个缺陷。银行转账的核心业务逻辑大家应该都很熟悉了,主要有这么几步:源账户扣除转账金额,当然首先需要先判断源账户余额是否足够,如果不够,则无法转账;目标账户增加转账金额;为 阅读全文
-
关于图书管理系统
摘要:关于图书管理系统的业务大家都应该比较了解了,主要的核心业务是:用户持图书卡去图书馆借书或还书。下面是他们几个人讨论的最经典内容,我特地整理出来供大家可以集中的观看他们的讨论。其实在我看来更是一种世界观与世界观的碰撞,我想借此表达的思想是:代码不一定要写很多,但是思维方式或者说世界观一定要正确,否则方向错了,就什么都错了。以下是讨论的详细内容:Jdon007:1、借书人(Reader)与借书卡(Card)不是镜像,借书人(Reader)是借书卡(Card)的使用者。 2、认证是认证,跟借书卡没有关系。在这里相当于借书人有没有资格拿到卡,也就是如果你不是这个学校的的师生,就拿不到这个学校图书馆的借 阅读全文
-
再论抽象
摘要:我刚开始进博客园的第一篇文章是不是就是说抽象这个事的?时光荏苒啊.... 有段日子不上了,刚才在园子里看见这么篇文章,觉得有必要就我这些年的思想进展,重新讨论下这个问题。原文在这里:http://www.cnblogs.com/yuyijq/archive/2011/04/26/2028789.html,不长,一定要读一下好知道我这篇文章讨论的基础,我就不重复文章中的重构过程了。类似的例子几年前在博客园的评论上探讨过(好象是跟伍迷),不过现在重新再看这个问题,我个人是清晰了不少。我们先讨论 IsValid(三个String参数一个Int参数) 重构为 IsValid(User) 的情况,因为弄 阅读全文
-
领域驱动设计(DDD)
摘要:通过银行转账作为例子深入分析各种实现该业务逻辑的方法(事务脚本、Evans DDD、基于事件驱动的设计)摘要: 废话不多说了,本文的目的是希望通过一个“银行转账”的例子来和大家分享一些我最近学习到的关于如何组织业务逻辑的心得和体会。当然,本人的能力和领悟有限,如有不正确之处,还希望各位看官能帮我指出来。我始终坚持一个信念,没有讨论就没有进步,任何一个非盈利为目的的人或组织始终应该把自己所学的知识共享出来与人讨论,这样不管对自己或对他人或对整个社会都大有好处。因为一个人的知识毕竟是有限的,但可以(并且也只能)和别人相互沟通交流学习来弥补这个缺陷。银行转账的核心业务逻辑大家应该都很熟悉了,主要有这 阅读全文
-
对象的自治和行为的扩展与适配[转]
摘要:在坏的设计中,数据往往是分散的,甚至是杂乱的,这就好像一群失去意识的猛兽,我们无法控制、协调以及管理它们。这种漫无头绪的散乱数据,犹如猛兽的肆意妄为,会给系统带来无尽的灾难。随着系统的演化,这种灾难会逐渐蔓延至系统的各个角落。因此,在面向对象设计过程中,对数据分类是识别对象的一个前提。但是,仅仅封装了数据的对象,如果没有操作数据的行为,仍旧是没有意识的死亡对象。我始终认为,对象在拥有自己数据的情况下,应该是自治的。这种“自治”类似于SOA中服务自治的概念,但由于对象应该保持足够合理的细粒度,因此这种自治是有限度的自治;或者说它体现的是专家的自治。如果对象拥有足够的数据信息,就必须树立这些信息的 阅读全文
-
精益求精,抑或得过且过[转]
摘要:程序员面临的最痛苦之事,莫过于修改旧代码;如果还有比这更痛苦的,就是修改糟糕透顶,乱得一团糟的烂代码。最近因为手底下一帮程序员都在忙,市场部正好又反馈过来一个要命的bug,一时手痒,就领下了这个任务。我们这个产品是针对教育行业的,它是在好几年前开发,然后不断完善和维护。这些阶段都是在我来到这家公司之前完成的。所以,我对于产品的代码并不熟悉。原来的需求是假定客户设置分数段时,不同的分数段有不同的有效分,对应着也就有不同的名次。这些数据都是经过分析器分析获得,并持久化到数据库中。当我们需要生成学生报告时,再从数据库中获取,并将数据填充到iReport设置好的模板中,一个是二维表,一个是柱状和曲线图 阅读全文
-
一般WEB 系统可能涉及的功能
摘要:一般WEB 系统可能涉及的功能主要如下:1.系統用戶和角色管理 A 用戶和角色的增刪改查 B 認證模式(AD/Forms/Windows) C 用戶和角色的分配2.核心業務邏輯類和數據訪問類 A 序列化 B 多數據庫管理 C SQL語句配置化 D ORM E ServiceFactory3.通用的數據表現組件4.數據緩存 A SQL Dependency B 一般緩存5.異常處理6.日誌 A日誌格式 B 配置文件監控7.報表和打印 A HTML報表 B Excel報表 C PDF 報表 D 服務器端打印 E 客戶端打印8. Email A SMTP B POP39.編碼轉換10.文件管理 A 阅读全文
-
步步为营 .NET 设计模式学习笔记 四、Singleton(单例模式)
摘要:概述Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 模型图 逻辑模型图:物理模型图:<De 阅读全文
-
AgileEAS.NET平台开发案例-药店系统-项目说明
摘要:开篇 我们都知道开发一个软件必须要有开发的背景和特殊的需求等等,我们就来分析我们开发该系统的项目背景和开发该项目的目的。下面我们来分析下开发药店系统的目的及可行性研究分析,对现有平台构建该项目的风险性等进行分析,可行性方案的分析。其他方面的因素分析。大纲 1、总论 2、项目建设的背景和必要性 3、项目的方案设计总论 我们既然要开发药店系统,那么我们必须知道开发这个项目的意义和目的,药店系统主要解决很多的药店的信息化管理,从采购到销售到财务管理等一体化的信息化系统解决方案。该系统包含药品采购管理,药品库存管理,药店销售管理等子模块,药店信息管理软件针对我国医药企业药品经营管理特点(尤其是中小型药 阅读全文
-
Protocol Buffers?----好东西
摘要:What is it?Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of its internal RPC protocols and file formats.http://code.google.com/p/protobuf/http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns 阅读全文
-
步步为营 .NET 设计模式学习笔记 一
摘要:开篇(设计模式之泡妞二十三招)园子里讲设计模式的太多了,最近我也在学设计模式,把我自己练的一些代码整理下,写个.NET设计模式学习笔记来让自己在设计模式的功底更深一层。记得金庸小说里风清扬教令狐冲的时候,说过独孤九剑的总纲,无招胜有招,其实设计模式中也有这种总纲,那便是 ?Identify the aspects of your application that vary and separate them from what stays the same.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开)。而我就有泡妞二十三招比喻设计模式的二十三种模设的开篇吧,作为大家茶余饭后的笑资 阅读全文
-
项目中使用的架构
摘要:现在项目中使用的架构大概如下图,一个典型的分层架构,从PetShop学习得来,当时认为业务逻辑是不可能更换的,所以便去掉了IBLL层,但是现在看来这一层还是很有必要的,不同的时候看同一件事就会有不同的看法。UI层主要是收集数据和显示数据。Model层主要是一些贫血的实体类。BLL层主要负责业务逻辑的处理。IDAL是数据访问接口层。DALFactory主要负责数据访问对象的构造,这里主要是用到了反射来创建对象。DAL层实现数据访问接口。这个分层架构的好处是各个层的职责更加明确,同时由于通过接口来处理数据存储,所以理论上可以实现多数据库支持。对于一般的项目,这个架构也算是足够了。但是仔细分析会发现 阅读全文
-
推荐两个界面原型设计工具--GUIDesignStudio 和 Mockups For Desktop
摘要:前段时间,有幸参加一次高级软件架构师的培训,授课老师介绍了两个很好玩的界面原型设计工具:GUIDesignStudio 和 Mockups For Desktop,现分享一下,截图说明,洗洗眼球,权当娱乐。以前在做界面原型设计的时候(不多,但有时候要做的),印象中多数用Visio或者一些UML工具来大致描述一下,效果及交互性较差,不知您是否做过这方面的工作,不管有没有,我们来了解下这两个比较有意思的东西吧。GUIDesignStudio 运行后,随便画上几个控件,界面如下:运行设计好的内容后,界面如下所示:Mockups For Desktop 运行后,涂鸦设计后的界面如下:运行后的界面:再看 阅读全文
-
一款好的UI草图设计软件
摘要:前一段时间偶然用了下Balsamiq Mockups这个软件,感觉挺好,而且是用的次数越多,感觉就越好啊,哈哈。这个是下载地址:http://balsamiq.com/可惜是收费版的,要$79...不过设计出来的东西还是挺好的,如:以及这个:这个是程序的主界面(里面还能够将设计图纸导出为图片,支持的格式还挺多的):这个软件初学者一学就能会,就是刚开始时改变习惯可能会有点困难。标签:UI设计,Balsamiq,UI草图绿色通道:好文要顶关注我收藏该文与我联系呃,既然一样收费,还是用用guidesignstudio吧。。。。 阅读全文
-
构建易于维护的分布式程序
摘要:摘要:本篇博客没有新东西,只不过是把去年在珠三角技术沙龙做的一次演讲的其中一张 ppt 展开讲一讲。本文标题中的“易于维护”指的是 supportability,不是 maintainability。前者是从运维人员角度说,程序管理起来很方便,日常的劳动负担小;后者是从开发人员的角度说,代码好读好改。前文《分布式系统中的进程标识》我提到一个观点:分布式系统中的每个长期运行的、会与其他机器打交道的进程都应该提供一个管理接口,对外提供一个维修探查通道,可以查看进程的全部状态。一种具体的做法是在程序里内置 http 服务器。今天展开谈一谈这么做的必要性。分成两个方面来说:1) 在服务程序内置监控接口 阅读全文