从接触asp.net那天算起,至今已有5,6个年头了,从对后端编程一窍不通到现在勉强能算熟练制作简单b/s架构的项目,一路走来虽然磕磕绊绊,但也算勤勤恳恳,看了不少,学了不少,期间,尝试过传统三层架构,单类,webform中直接使用linqtosql,mvc+entityframework等几种,慢慢也形成了自己喜欢的一种写法,非架构,更多的只是项目代码的组织方式。
目录很简单,如下:
项目名称.Utility // 工具类,封装读写txt之类的公共方法
项目名称.Core // 核心层,数据model、业务模型、接口定义等
项目名称.Service // 数据层+业务逻辑层
项目名称.Web // 站点、view层、mvc、webform、webapi之类
整个项目有点像mvc,分别对应core、web、service三个目录。
项目名称.Utility
各种工具类,估计每个程序员手里都有一套。
项目名称.Core:
项目名称.Core.Models // 数据模型,可以像entityframe一样,用 public virtual 对象类型 属性名 {get;set;} 的方式定义关联对象
项目名称.Core.Interface // 项目中使用的接口在这里定义
项目名称.Core.Business // 业务模型,对应三层中的BllModel,当数据模型在业务代码中无法满足需要,在这里定义新的类型以方便业务逻辑调用
项目名称.Core.Common // 通用层,如BaseModel,BaseResponse之类的通用类在这里定义
项目名称.Core.Api // api模型,如需开放或者调用第三方api,在这里定义对应的request和response数据类
除了models和common,其他目录都非必须,对大部分小型项目而言,只要这两个目录就足够了。
项目名称.Service
项目名称.Services.Factory // 跟数据库相关的所有代码都写在这里
项目名称.Services.UnitOfWork // 较复杂的逻辑写在这里
项目名称.Services.Other // 其他功能性代码写在这里
除了Factory,其他目录都非必须。
一般数据的增删改查,直接使用Factory即可,有些复杂的逻辑,如操作订单,可能读写多个对象,这时可以把这些逻辑写到新的OrderUnitWork类中,这样有助于类职责的专一和独立。一般factory类可使用工具自动生成。
除了这两个目录,可以根据项目的需求添加其他目录(如:Other)来保存相关的功能性代码或配置。比如:在Utility中有一个上传图片的imageuploader通用类,调用时需指定保存路径,而在此项目中保存目录的规则是统一的,就可以在services类库中创建一个项目专用的已配置好的imageuploader类,供其他层调用。
项目名称.Web
这里可以是webform,可以是website,也可以是mvc和webapi,习惯哪个用哪个即可。个人比较喜欢website的方式,不过为了可以定义webapi,目前大部分时间使用webform+webapi的方式。偶尔使用mvc+webap。
好了,组织方式先到这里,下一篇,Core层相关的一些配置。谢谢~