对姜敏朋友的回复

没想到我的一篇拙文引起姜敏朋友的深入思考,并且写了一篇博文交流,在此先表示感谢!

姜敏博文地址:对于项目架构的疑惑

以下为回复:

1.     疑问一:分层架构中的面向接口

博文作者按照我的思路做了一个小Demo,并质疑对数据存取层的修改是否真的不会避免业务逻辑层的修改。

首先,要澄清的一点是,在面向接口的编程中,共享的是接口(或契约)而屏蔽的是实现。所以这里涉及到一个问题,如果是对接口(或契约)的修改的话,那双方就都需要修改代码,而如果仅仅是对实现的修改的话,就不用修改接口的另一端。不知我说明白没有。

Demo里,其实修改的是接口,而不是实现。所以肯定会影响到接口的另一端。

作者还提到了工厂模式。其实工厂模式是创建型模式,不是行为性或结构性模式,所以它解决的不是修改代码时对接口另一端的影响问题,而是如果方便地创建新的产品系的问题。例如工厂方法可以解决IDataAccess _Parter = new OrderAccess();这一的类名硬编码的问题。而抽象工厂可以解决增加一个产品系不会影响之前存在的代码的问题。只是增加一个产品,并增加一个产品的消费者而已(注意是“增加”,而不是修改,这是最重要的)。

2.     疑问二:强类型的DataSet为什么不能在层与层之间传递呢?

这个问题其实很简单,强类型DataSet中直接包括了数据库的结构,如果它被整个系统的各个层都消费的话,就意味着各个层都对数据库结构有直接的了解。那和Client-Server模式又有什么区别呢?分层的意义何在呢?“架构”这个词的意义就是是系统处于一种能用最小的代价应对变化的状态中(我个人的理解)。而Client-Server模式中的一个很小的数据库修改,就会涉及到难以想象的代码范围。呵呵。

 

不知我的回复能否让姜敏朋友满意,如有不正指出,欢迎大家指正。

posted on   zhaojunqi  阅读(3035)  评论(50编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2008年8月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
点击右上角即可分享
微信分享提示