0 综述
1 MVP各模块规范
1.1 实体模块规范
1.1.1 命名规范
1.1.2 架构规范
1 namespace TestProj.DataEntity 2 { 3 public interface ITestProjEntity<T> : IEquatable<T> 4 where T : ITestProjEntity<T> 5 { 6 } 7 }
public class Patient : IOpenTCMEntity<Patient> { public string ID { get; set; } //主键ID public string Name { get; set; } //姓名 public bool Equals(Patient other) { if (other == null) { return false; } if (other == this) { return true; } bool res = other.ID == ID && other.Name == Name; return res; } }
1.2 数据库访问接口
1.2.1 命名规范
1.2.2 架构规范
1 public interface IBaseDAO<E> 2 where E : IOpenTCMEntity<E> 3 { 4 /// <summary> 5 /// 是否存在ID所对应的记录 6 /// </summary> 7 /// <param name="id"></param> 8 /// <returns></returns> 9 bool Exists(string id); 10 /// <summary> 11 /// 是否存在参数对象所描述的记录(属性为空表示该属性不作为查询条件) 12 /// </summary> 13 /// <param name="condition"></param> 14 /// <returns></returns> 15 bool Exists(E condition); 16 /// <summary> 17 /// 将参数描述的实体对象添加到数据库中 18 /// </summary> 19 /// <param name="po"></param> 20 /// <returns></returns> 21 bool AddEntity(E po); 22 /// <summary> 23 /// 将参数描述的实体对象集合添加到数据库中 24 /// </summary> 25 /// <param name="pos"></param> 26 /// <returns></returns> 27 bool AddEntity(List<E> pos); 28 /// <summary> 29 /// 根据ID从数据库中删除实体 30 /// </summary> 31 /// <param name="id"></param> 32 /// <returns></returns> 33 bool DelEntity(string id); 34 /// <summary> 35 /// 依据参数描述的数据库记录更新数据库, 36 /// 本操作需要先从数据库获取具体的对象。 37 /// </summary> 38 /// <param name="po"></param> 39 /// <returns></returns> 40 bool UpdateEntity(E po); 41 /// <summary> 42 /// 依据参数描述的对象为条件,获取记录数。 43 /// </summary> 44 /// <param name="condition"></param> 45 /// <returns></returns> 46 long GetCount(E condition); 47 /// <summary> 48 /// 获取总记录数 49 /// </summary> 50 /// <returns></returns> 51 long GetCount(); 52 /// <summary> 53 /// 获取所有实体对象集合 54 /// </summary> 55 /// <returns></returns> 56 List<E> SelectEntity(); 57 /// <summary> 58 /// 获取分页对象集合 59 /// </summary> 60 /// <param name="beg"></param> 61 /// <param name="len"></param> 62 /// <returns></returns> 63 List<E> SelectEntity(int beg, int len); 64 /// <summary> 65 /// 根据ID获取一个实体对象 66 /// </summary> 67 /// <param name="id"></param> 68 /// <returns></returns> 69 E SelectEntity(string id); 70 /// <summary> 71 /// 依据条件获取实体集合 72 /// </summary> 73 /// <param name="condition"></param> 74 /// <returns></returns> 75 List<E> SelectEntity(E condition); 76 }
1 public interface ITestDAO:IBaseDAO<Test> 2 { 3 }
1.3 数据业务接口规范
1.3.1 命名规范
1.3.2 架构规范
1 public interface IBaseBO<E, DAO> 2 where E : IOpenTCMEntity<E> 3 where DAO : IBaseDAO<E> 4 { 5 /// <summary> 6 /// 数据库操作对象 7 /// </summary> 8 DAO DbOperator { get; set; } 9 /// <summary> 10 /// 是否存在ID所对饮的记录 11 /// </summary> 12 /// <param name="id"></param> 13 /// <returns></returns> 14 bool Exists(string id); 15 /// <summary> 16 /// 是否存在参数对象所描述的记录(属性为空表示该属性不作为查询条件) 17 /// </summary> 18 /// <param name="condition"></param> 19 /// <returns></returns> 20 bool Exists(E condition); 21 /// <summary> 22 /// 将参数描述的实体对象添加到数据库中 23 /// </summary> 24 /// <param name="po"></param> 25 /// <returns></returns> 26 bool AddEntity(E po); 27 /// <summary> 28 /// 将参数描述的实体对象集合添加到数据库中 29 /// </summary> 30 /// <param name="pos"></param> 31 /// <returns></returns> 32 bool AddEntity(List<E> pos); 33 /// <summary> 34 /// 根据ID从数据库中删除实体 35 /// </summary> 36 /// <param name="id"></param> 37 /// <returns></returns> 38 bool DelEntity(string id); 39 /// <summary> 40 /// 依据参数描述的数据库记录更新数据库, 41 /// 本操作需要先从数据库获取具体的对象。 42 /// </summary> 43 /// <param name="po"></param> 44 /// <returns></returns> 45 bool UpdateEntity(E po); 46 /// <summary> 47 /// 依据参数描述的对象为条件,获取记录数。 48 /// </summary> 49 /// <param name="condition"></param> 50 /// <returns></returns> 51 long GetCount(E condition); 52 /// <summary> 53 /// 获取总记录数 54 /// </summary> 55 /// <returns></returns> 56 long GetCount(); 57 /// <summary> 58 /// 获取所有实体对象集合 59 /// </summary> 60 /// <returns></returns> 61 List<E> SelectEntity(); 62 /// <summary> 63 /// 获取分页对象集合 64 /// </summary> 65 /// <param name="beg"></param> 66 /// <param name="len"></param> 67 /// <returns></returns> 68 List<E> SelectEntity(int beg, int len); 69 /// <summary> 70 /// 根据ID获取一个实体对象 71 /// </summary> 72 /// <param name="id"></param> 73 /// <returns></returns> 74 E SelectEntity(string id); 75 /// <summary> 76 /// 依据条件获取实体集合 77 /// </summary> 78 /// <param name="condition"></param> 79 /// <returns></returns> 80 List<E> SelectEntity(E condition); 81 }
public interface ISymptomBO : IBaseBO<Pathology, ISymptomDAO> { //TODO:Type your specific business logical code }
1.4 数据访问模块
1.4.1 命名规范
1.4.2 架构规范
数据上下文类结构如下:
public class OpenTCMContext : DbContext { public OpenTCMContext() : base("TestConnStr") { } public DbSet<TestTableA> TestTableAContext { get; set; } public DbSet<TestTableA> TestTableBContext { get; set; } }
数据访问类部分代码示意如下:
[Export(typeof(ITestDAO))] public class TestDAO : ITestDAO { public TestDAO() { context = new OpenTCMContext(); } private readonly TestProjContext context; public bool Exists(string id) { var res = context.TestContext.SqlQuery("ID='{0}'", id); if (res.FirstOrDefault() == null) { return false; } int count = res.Count(); return count > 0; } //... }
1.5 数据库业务模块
1.5.1 命名规范
1.5.2 架构规范
[Export("TestBO", typeof(ITestBO))] public class TestBO : ITestBO { public TestBO() { var catalog = new DirectoryCatalog("./"); var container = new CompositionContainer(catalog); container.ComposeParts(this); } [Import] public ITestDAO DbOperator { get; set; } public bool Exists(string id) { return DbOperator.Exists(id); } //... }
2 总结
至此,一个基于.Net + MEF + EF6 的轻量级系统基础架构就完成了。其中业务接口依赖于数据操作接口,业务模块与数据操作模块分别依赖于其所对应接口,具体模块之间没有依赖关系。各接口、具体模块均需添加实体模块的引用。

