在面向接口编程的思维引导下,最后呈现的代码结构层次是什么样的全依赖于接口的定义;
SOLID 五大基本原则基本都在强调接口的职责边界(SRP,ISP),需要通过明确接口的职责边界(LSP)来达到,面向接口(抽象类)编程(DIP)以及 OCP 私以为也蕴含着面向接口编程的含义;
在软件工程中,没有一个中间层解决不了的问题;所以加入类的中间层次能够大大分解简化逻辑,提高可读性;
通过明确职责边界来分解接口职责;封装通过提供抽象,明确可提供的服务,隐藏实现的细节;
强烈推荐看一些 DDD 的东西,虽然项目中不会使用;
若项目中使用了(或隐含了)领域服务的概念,则在领域服务内十分建议禁止注入该领域模型之外的仓储层以及基础设施(尽量减少缩小单个类“能力”与“职责”)。
例如:
a. 针对表明对应的 Service 可以当做一种领域服务的概念,在该 Service 尽量不要注入本表以及强关联表的仓储层引用,其尽量只能处理本属的领域模型内的数据操作;
b. 较复杂的业务逻辑,以及需要调用其他领域模型服务(跨领域模型)以及基础设施(短信,MQ)等建议放在领域服务上一层-应用层;
c. 在应用层,依照 SOLID,KISS原则,分解职责之后,最终的逻辑可以在一个 总的上下文中利用组合的方式串联业务逻辑;
分解思维:分解思维是将一个大问题拆解成许多小的部分。这些小部分更容易理解,让问题更加容易解决。
抽象思维:是人们在认识活动中运用概念、判断、推理等思维形式,对客观现实进行间接的、概括的反映的过程。用好抽象的关键在于对所处理问题的深刻理解。
设计的比较好的抽象可以把说明从实现中分离出来,通过提供必备的信息,隐藏起实现的细节,让客户以较为安全和可预测的方式使用对象,同时通过降低复杂性。
好的抽象,应该使客户打消“偷窥”的念头(不过总是有些人想方设法去窥视具体的实现),按照抽象编程,使得最终的客户代码更加的简单、安全和稳定,在这方面,标准程序库和各种准标准程序库做得最为出色。
一个好的抽象必须提供明确的、完整的、易于理解的说明,依赖抽象编程,实际上就是依赖这些说明进行编程,他比依赖实现编程有很大的优势:一个好的说明应该是规定接口必须提供的服务,必须完成的任务,而不是已经做过的事情。
网友评论