Agatha网站架构图:
分七层:
Agathas.Storefront.Infrastructure
Agathas.Storefront.Model
Agathas.Storefront.Repository.NHibernate
Agathas.Storefront.Service
Agathas.Storefront.Service.Cache
Agathas.Storefront.Controllers
Agathas.Storefront.UI.Web.MVC
1、用户界面/展现层
用于向用户展现信息,处理用户在界面上的请求。比如struts,tapestry,springMVC等页面框架。
更细的方面来讲就是:
1. 请求应用层以获取用户所需要展现的数据;
2. 发送命令给应用层要求其执行某个用户命令;
2、应用层
用来处理应用的活动,不包含领域中的业务逻辑。
应用层可以用来处理一些与领域概念无关的拦截性质的工作,比如日志,事务等。
此外,应用层也可以用来处理一些既不属于展现层,也不属于领域层,而是属于目前应用相关的一些服务。比如资金转账的业务的读取输入功能(读取输入不是转账的核心业务含义)。
对外为展现层提供各种应用功能(包括查询或命令),对内调用领域层(领域对象或领域服务)完成各种业务逻辑,应用层不包含业务逻辑。
3、领域层
负责表达业务概念,业务状态信息以及业务规则,领域模型处于这一层,是业务软件的核心。领域对象,领域服务,仓储接口均位于此层
领域的信息,是业务软件的核心所在。
需要保留业务对象的状态,对业务对象及其状态持久化的操作交给基础设施层。
领域层应该遵从以下原则:除非业务发生变化,否则其他任何变化均不应该影响到领域层。这些其他变化包括:不同的展现框架,不同的页面展现内容,是否要分页,是否支持手机客户端,是否公开WebService,是否提供OpenAPI等等。
4、基础设施层
本层为其他层提供通用的技术能力;提供了层间的通信;为领域层实现持久化机制;总之,基础设施层可以通过架构和框架来支持其他层的技术需求;
此层作为其他层次的支撑,可以为领域层的持久化提供支持,我们把这种为领域层提供持久化的基础设施层叫做仓储。仓储是个接口,且应该属于领域层。仓储的实现可以多样化:比如选择hibernate,JDBC等等。此外,基础设施层,也可以为应用层提供服务,比如发送通告,电子邮件,读入xml等等。