随笔分类 - 架构思想
摘要:大家好,我是木宛哥;在 10余年的工作经历让我深刻体会到软件开发不仅仅是写代码,更是一个系统化的交付过程。 为此我总结了20条编程感悟,涵盖了代码规范、设计原则、测试方法与交付流程等多个方面;通过遵循代码规范,让代码更加可读与可维护,同时合理的设计能够有效应对需求变化,模块化的单元测试又确保了产品
阅读全文
摘要:大家好,我是木宛哥,今天和大家分享下——代码 CR 时针对恼人的空指针异常(NullPointerException)如何做到体系化去防控; 什么是空指针异常 从内存角度看,对象的实例化需要在堆内存中分配空间。如果一个对象没有被创建,那也就没有分配内存,当应用程序访问空对象时,实际上是访问一个“无效
阅读全文
摘要:使用枚举替换布尔值主要基于以下几个原因 ● 可读性 ● 可拓展性 ● 安全防控 可读性 我们会定义 boolean 类型(true 或 false)作为方法参数,虽然比较简洁,但有时候参数的含义往往不够清晰,造成阅读上的障碍, 比如:参数可能表示“是否开启某个功能”,但仅凭 true 和 false
阅读全文
摘要:为什么需要“依赖注入” Case 1 public class Foo { private Bar bar; public Foo() { bar = new Bar(); } public void doSomething(int key) { String result = bar.getRes
阅读全文
摘要:书接上回为什么需要依赖注入再做下扩展 上文谈到:“基于抽象接口编程确实是最佳实践:把易于变动的功能点通过定义抽象接口的形式暴露出来,不同的实现做到隔离和扩展,这体现了开闭原则” public class Foo { private Bar bar ; @Inject public Foo(Bar b
阅读全文
摘要:原文《Thinking In Design Pattern——MVP模式演绎》不知为何丢失了,故重新整理了一遍。目录What Is MVPDomain ModelStubRepositotyIView & PresenterViewIoc容器StructureMap开篇忙碌的9月,工作终于落定,新公司里的框架是MVP+Linq,对于MVP虽然不熟,但有MVC的基础,花了两天时间研究了MVP,故作此博文,留作参考。Model-View-Presenter(模型-视图-呈现器,MVP)模式的重点是让Presenter控制整个表示层的逻辑流。MVP模式由如下三个不同部分组成:模型表示视图显示
阅读全文
摘要:服务层的定义Domain Model的设计与实现IRepository的设计与实现Document Message模式和Request-Response模式的探索DataContract的设计与实现Contracts的设计与实现Service的设计与实现Idempotent模式的探索ClientProxy的设计与实现服务门面Facade的设计与实现客户端访问什么是服务层服务层位于表示层和业务层之间,他提供一个接口来定义应用程序的边界以及可供客户端使用的操作,在服务层向客户端描绘的门面后,它将业务逻辑、验证和工作流封装起来并协调业务实体的持久化和和检索工作——《ASP.NET设计模式》接下来,将
阅读全文
摘要:什么是Query Object模式Query Object的架构设计Query Object在服务层的应用测试Query Object模式Query Object:可以在领域服务层构造查询然后传给资源库使用,并使用某种查询翻译器将对象查询(Query)翻译成底层数据库持久化框架可以理解的查询(即翻译成一条Sql 语句)。而Query Object即可以理解为表示数据库查询的对象。且可以构造任意查询,然后传给Repository。Query Object模式的主要好处是它完全将底层的数据库查询语言抽象出来。如果没有某种查询机制,我们的持久化层可能会这样定义方法: public interf...
阅读全文
摘要:开篇我之前发过一篇博文《两天完成一个小型工程报价系统(三层架构)》,不少朋友向我要源码学习,后来久而久之忘记回复了。今天我再分享一个进销存系统,只为学习,没有复杂的框架和设计模式,有的是我个人的理解,大家互相探讨技术才会提高。当然我的命名不是很规范,兄弟们凑合着看。:)思想和架构在传统的三层架构思想上扩展出N层架构,将业务逻辑层换成WCF服务。抽象工厂的引入提高了程序的扩展性,单利+缓存+反射则提升了程序的性能。数据库则换成了Oracle,所以相应的数据访问层也换成了OracleDal,当然你完全可以写SqlServerDal,因为我数据访问层接口都已定义好。界面和控件的设计美化总体思路和流程
阅读全文
摘要:开篇平常开发时,由于冗余代码过多,程序员做重复的工作过多势必会影响开发效率。倘若对重复性代码简单的复制、粘贴,虽然也能节省时间,但也需仔细一步步替换,这无疑也是一件费力的事。这时我们急需代码生成工具,根据一套Template快速生成我们需要的代码。代码生成器原理简单,完全可以开发一套适合自己的代码生成器,一个最简单的代码生成器,有几点你需要关注下:查询系统视图:INFORMATION_SCHEMA.TABLES、INFORMATION_SCHEMA.COLUMNS 可以获得数据库中表、列的相关信息。字符串的拼接:StringBuilder的使用,其AppendLine()自动换行。将字符串写入
阅读全文
摘要:上一篇博客中《两天完成一个小型工程报价系统》,许多朋友向我讨源码。其实我之后没发了,确实那种三层架构没什么意思,只是我个人的孤芳自赏,很多的处理都不是很成熟。所以我重新架构了一番,以一个小例子来阐述我的架构模式,当然,这和企业级的架构还是差距很大,不过,还是值得一读。不积硅步,无以至江海,只有从小细节慢慢领悟,步步为营,才能设计出优秀的企业级架构。 重构后的架构图:解决方案里项目设计:数据库访问层接口设计:IBaseDaoRepository模式这儿使用了Repository模式,抽象出一个公共的接口IBaseDao,IBaseDao接口中定义了一系列契约(CRUD),不管我的我数据访问用了.
阅读全文
摘要:花了两天,整理了一下三层架构,顺便练了一个小型三层架构——工程报价系统。功能很简单,完成基本的增删改查搭建项目三层结构界面的设计以及美化分层代码的设计与实现模型层:由于表设计时存在主外键关系,故把表映射成对象时添加一个外键对象来保存外键那张表的相关数据。 // 外键实体 private Product _product; private Project _project; public Project _Project { get { return _pr...
阅读全文
摘要:上篇《简单代码生成器原理剖析(一)》分析了代码生成器的原理,查询数据库系统视图:INFORMATION_SCHEMA.TABLES、INFORMATION_SCHEMA.COLUMNS 可以获得数据库中表、列的相关信息,再运用StringBuilder类的其AppendLine方法追加字符串,最后早运用File.WriteAllText方法将字符串写入文件。第二版代码生成器在第一版的基础上扩展了以下功能:使用了部分类(partial):当使用大项目或自动生成的代码(如由Windows 窗体设计器提供的代码)时,将一个类、结构或接口类型拆分到多个文件中的做法就很有用。分部类型可能包含分部方法。使
阅读全文
摘要:上篇文章(深入浅出三层架构)分析了简单三层架构的实现。包括Model,DAL(数据访问层),BLL(业务逻辑层)的实现。
实际开发中,由于重复代码的操作,会花费大量时间,如果以代码生成器来自动生成三层架构代码,即节省精力,又可以节省大量的时间来做其他业务逻辑的代码,提高开发效率。
简单代码生成器的基本功能描述:
一键生成Model,DAL,BLL,包括对应数据库中表的Model的自动生成,包括生成属性、添加、修改、删除、查询。
阅读全文
摘要:三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:
表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想,复杂项目不能把SQL语句直接写到程序里,不模块话,难以维护。应该采取三层架构。
阅读全文