BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

文章:融合思想──深入探索S#arp架构

| 作者 Billy McCafferty 关注 0 他的粉丝 ,译者 张逸 关注 12 他的粉丝 发布于 2009年6月25日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

开源产品S#arp架构的创始人Billy McCafferty亲自撰文对其产品进行了深入剖析。在文中,他追溯了软件开发,尤其是Web应用程序开发的发展历程,深入介绍了面向对象设计的基本原则,以及如何构建一个松散耦合的应用系统。他认为:

遗留软件系统最常见的毒瘤是紧耦合。紧耦合的例子多不胜数,例如两个对象之间存在双向依赖;具体依赖于服务的对象如数据访问对象;还有在单元测试中,如果依赖的服务断开或不可用,就无法测试服务的行为。紧耦合会导致脆弱的代码,使代码难以测试。修改紧耦合的代码,会让开发人员视如畏途,不战而降,甚至逃之夭夭。毫无疑问,一个成功软件的关键就是松散耦合。

紧耦合的系统会带来诸多问题,而解决之道就是解除依赖,通过对关注点的分离,使领域层依赖于数据访问层的接口,而不是具体实现。

文中介绍了有关测试驱动开发的相关知识。他提出:

TDD隐含的基本思想是带着疑问开始软件开发,在开发过程中要不停地询问系统。例如,倘若你正在开发一个银行系统,可能需要询问系统,它有能力成功处理客户的存款业务吗?关键之处在于要在实现行为细节之前提出问题。随之而来的好处就是在编写系统之前,它能够让开发者将注意力放到系统要求的行为上。

Billy McCafferty对领域驱动设计有着自己独特的见解。他认为:领域驱动设计是早期编程方法的一种自然进化,例如针对数据库数据进行模型驱动开发,其对应的模型可以视为应用程序的核心,要做的工作就是操作数据。……虽然,领域驱动设计需要数据库,但关键在于领域对于持久化机制(实现数据存储与获取的机制)应该是一无所知的。

虽然软件开发已经见趋成熟,目前也涌现出许多成熟的产品和工具,以及一些经过验证的最佳实践,能够帮助开发者提高开发的速度。但问题是,我们需要有足够睿智的眼光对这些原则、思想和工具进行合理地挑选。而S#arp架构正是为解决这一问题应运而生。它利用了诸多业已证明行之有效的实践,谨慎地选择工具以提高开发效率,保证系统高质高量,以及良好的可维护性。

若要了解更多信息,请阅读文章:融合思想──深入探索S#arp架构

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

事实上我认为SharpArchitecture还是太复杂了 by Jeffrey Zhao

其中一个重要原因是NHibernate太复杂了,ASP.NET MVC框架还是很容易的。
希望Fluent NHibernate,LINQ to NHibernate可以解决这样的问题。

web开发的银弹? by soft SG

业务是软件的灵魂,从web form到mvp,到今天的mvc,DA从ado.net到Hibernate,结果发现新框架,新工具并没有多大层度上真正提高生产力。

例如:codesimith生成的DAL层与使用hibernate的领域对象模型,开发效率几乎一样,前者灵魂性和运行效率稍高一些(依赖于模板的水平);

反而,各种复杂的报表统计,需周期性执行的任务,多线程与并发处理...消耗了更多时间,如果有更好的框架或工具解决这些问题,貌似比解决UI与业务层的耦合要重要。

Re: web开发的银弹? by yang shuai

楼上正解,我觉得通过 dsl 生成 代码 是个非常好的思路

Re: web开发的银弹? by Jeffrey Zhao

但是,开发并非只有业务,同样的DSL表示出的代码可以有各种各样的,我不认为代码生成能解决多少问题……
不过,这是我的猜测,我很乐意看到这样的成功案例出来。

Re: 事实上我认为SharpArchitecture还是太复杂了 by wu andy

的确是太复杂了,但我不认为主要是NHibernate的原因。有了Fluent NHibernate后,的确要方便不少。

我觉得复杂的原因,还是在于数据库和领域对象之间的鸿沟,无论用何种orm,似乎都无法做到简单些的架构。

Re: 事实上我认为SharpArchitecture还是太复杂了 by Jeffrey Zhao

我认为问题是这样的:业务太复杂了,DDD的细节也太多,因此NHiberante为了对应各种灵活的情况和DDD中的概念,很难做到不复杂。
因此,NHibernate在对于简单的项目不如ActiveRecord等轻量级ORM。自然,这个复杂性可以说是业务带来的。

Re: 事实上我认为SharpArchitecture还是太复杂了 by wu andy

软件的复杂性,探究源头当然是由于业务的复杂性导致的,所以不会有任何银弹。

另外,Fluent NHibernate只是简化的映射的配置,对其他方面并没有帮助,还是只能靠NHibernate自己了。对linq to NHibernate倒是很期待,做得好的话应该可以提高不少效率。

Re: 事实上我认为SharpArchitecture还是太复杂了 by Jiamin Liu

“在于数据库和领域对象之间的鸿沟”
我觉得这个问题很多情况下都是系统的设计者在模型设计的时候就出现了问题,就是O这一点做得不好,所以造成RM就出现问题,很多时候都是因为某些设计者还停留在数据为中心思想来设计领域模型。
我到现在为止还没有遇到过太棘手关于orm的问题。

Re: web开发的银弹? by Jiamin Liu

我觉得效率肯定会提高了的,只是我们现在所做的系统业务逻辑越来越复杂了,客户是没有满足的。所以系统是没有一个终结的版本,万物都在发展。
对比是否有效率的提高应该是通过同一个项目,在使用框架和不使用框架的前提下进行对比的。
而“周期性执行的任务,多线程与并发处理”都能找到相应的通用框架,如果不满足自己需要的话,其实可以自己来做一个自己认为通用的,说不定会风靡业界。

Re: 事实上我认为SharpArchitecture还是太复杂了 by Jiamin Liu

如果觉得这部分太复杂完全可以替换成你觉得简单的ORM工具,或者直接使用ADO.NET,文章已经说的很清楚了,这个是基于接口的。

Re: 事实上我认为SharpArchitecture还是太复杂了 by Jeffrey Zhao

我看过原代码之后,意识到这个基本上是依赖NH的,否则实现难度很大。可能NH实现的最完整吧,如今还做不到Persistance Ignorance。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

11 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT