• ASP.NET MVC经典项目ProDinner项目解析


    ASP.NET MVC经典项目ProDinner项目解析(2)

    上一篇文章介绍了整体架构,接下来我会就每一个类库层次做个逐次介绍

    二、Core层解析

    在Core中做了几件事情

    第一层 Model

    1、定义整个系统的实体类型,包括了每个实体的关联。

    2、定义实体的公用字段(ID)和状态(IsDeteled),这两者非常简单,谁都能看得懂,作为范例,我觉得由此体现得更多的是一种思想。

      我们在做表设计的时候,很多同学,对外键关联时,外键字段名和主表的主键名并不对应,我想对现今的数据库也好,ORM框架也好,或许不是什么大问题,但在做架构设计时估计就会遇到问题,或为此多付出代码。有同学用过DevExpress框架的话,这点会体现的更明显。

      再者对于记录,状态、操作模块、操作时间等几乎每张表都会涉及的字段,最好每张表都能统一,这不是技术问题,是习惯和规范问题。

    第二层 Repository

    这层记录了所有的针对实体类的操作,也就是上一层Model的动作, 所以该层全部都是定义的接口,而针对每个Model的具体动作,在Service中去实现差异化

    复制代码
    namespace Omu.ProDinner.Core.Repository
    {
        public interface IDelRepo<T>
        {
            IQueryable<T> Where(Expression<Func<T, bool>> predicate, bool showDeleted = false);
            IQueryable<T> GetAll();
            void Restore(T o);
        }
    }
    复制代码

    实体状态查询接口,三种操作,第一种根据每个实体继承的IsDeteled字段来筛选查询,由此我们可以联想到我们具体工作行业背景,如果你是做ERP的,各种单据的状态,审核、撤销、提交等我们都可以通过不同的接口不同的字段,然后不同的IRep来控制,于是一个复杂的ERP抽象单据状态控制层就出现了。如果你是做电子商务的,那么在订单提交的时候几种不同的状体,是否也可以考虑使用这种方式实现呢。

    复制代码
    namespace Omu.ProDinner.Core.Repository
    {
        public interface IRepo<T>
        {
            T Get(int id);
            IQueryable<T> GetAll();
            IQueryable<T> Where(Expression<Func<T, bool>> predicate, bool showDeleted = false);
            T Insert(T o);
            void Save();
            void Delete(T o);
            void Restore(T o);
        }
    }
    复制代码

    这层教之前一个接口,多了,删除、插入、和保存的操作。

    复制代码
    namespace Omu.ProDinner.Core.Repository
    {
        public interface IUniRepo
        {
            T Insert<T>(T o) where T : Entity, new();
            void Save();
            T Get<T>(int id) where T : Entity;
            IEnumerable<T> GetAll<T>() where T : Entity;
        }
    }
    复制代码

    这层接口,非常明显的限制了,操作的对象类型,必须是继承了Entity的类型,这样做的好处,个人认为是对于一些类的特殊限制,某些类型注定是不能拥有或者说他的增、删、改、查,是有限制的。

    第三层 Security

    这层就不再详细说了,引用了Asp.Net的身份验证模块,故也进行了相应的接口限制。

    第四层 Service

    该层接口详细定义了四个类的操作接口

    ICrudService继承了上层接口的抽象接口

    IMealService类继承了 ICrudService 同时,规定了图片保存的接口

    IUserService继承了ICrudService,规定了用户验证的接口

    ProDinnerException规定了系统自定义的抛错机制。

    第二层和第四层之间的这么做的理由以及对后续模块设计的影响,有无其他的联系和影响,我暂时只看出了这些,对源代码的解析,其他同学还有无其他的看法,还请能分享出来,第一篇就说了,我只是在抛砖引玉。希望共同进步。

    当前标签: prodinner

     
    ASP.NET MVC经典项目ProDinner项目解析(2) aspnetdream 2013-04-14 21:47 阅读:164 评论:0  
     
    ASP.NET MVC经典项目ProDinner项目解析(1) aspnetdream 2012-03-02 21:52 阅读:2108 评论:5
     
     
     
  • 相关阅读:
    【原】一张图片优化5K的带宽成本
    让手机站点像原生应用的四大途径
    iScroll4下表单元素聚焦及键盘的异常问题
    蜕变·WebRebuild 2013 前端年度交流会邀请
    【原】js实现复制到剪贴板功能,兼容所有浏览器
    【原】css实现两端对齐的3种方法
    【原】常见CSS3属性对ios&android&winphone的支持
    一枚前端开发-页面重构方向的招聘信息
    【原】分享超实用工具给大家
    【原】webapp开发中兼容Android4.0以下版本的css hack
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3021183.html
Copyright © 2020-2023  润新知