多层架构在业务逻辑层实现IOC

简介:

在业务逻辑层实现IOC,可以有效的减少代码量,把通用的操作写在通用的类中,然后在UI层对谁操作就建立谁的实例。

具体做法看代码:

Service层核心代码:

接口规范:

namespace Service
{
    /// <summary>
    /// 标准逻辑处理接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IServices<TEntity> where TEntity : class,Entity.IDataEntity
    {
        /// <summary>
        /// 获得List结果集
        /// </summary>
        /// <returns></returns>
        List<IDataEntity> GetModelList();
 
        /// <summary>
        /// 获得IQueryable结果集
        /// </summary>
        /// <returns></returns>
        IQueryable<IDataEntity> GetModelIQueryable();
        /// <summary>
        /// 根据主键得到一个实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        TEntity GetModelById(string id);
 
        /// <summary>
        /// 插入实体
        /// </summary>
        /// <param name="entity"></param>
        void InsertModel(TEntity entity);
 
        /// <summary>
        /// 更新实体
        /// </summary>
        /// <param name="entity"></param>
        void UpdateModel(TEntity entity);
 
        /// <summary>
        /// 删除单个实体
        /// </summary>
        /// <param name="key"></param>
        void DeleteModel(params object[] key);
    }
}

实现:

namespace Service
{
    /// <summary>
    /// 标准逻辑实现CURD
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public class Services<TEntity> : IServices<TEntity>
        where TEntity : class,Entity.IDataEntity
    {
        IRepository iRepository = null;
 
        /// <summary>
        /// 构造函数实现IOC
        /// </summary>
        /// <param name="iRepository"></param>
        public Services(IRepository iRepository)
        {
            this.iRepository = iRepository;
        }
 
        public Services()
        {
 
        }
        #region IServices<TEntity> 成员
 
        public List<IDataEntity> GetModelList()
        {
            return this.iRepository.GetModel().ToList();
        }
 
        public IQueryable<IDataEntity> GetModelIQueryable()
        {
            return this.iRepository.GetModel();
        }
 
        public TEntity GetModelById(string id)
        {
            throw new NotImplementedException();
        }
 
        public void InsertModel(TEntity entity)
        {
            this.iRepository.Insert(entity);
        }
 
        public void UpdateModel(TEntity entity)
        {
            this.iRepository.Insert(entity);
        }
 
        public void DeleteModel(params object[] key)
        {
            this.iRepository.Delete(key);
        }
 
        #endregion
    }
}

具体业务对象:为了使UI层不直接调用Data层的尴尬

namespace Service
{
    public class UserServices
    {
        public Data.IRepository UserBasesRepository
        {
            get
            {
                return new Data.OA.UserBasesRepository();
            }
        }
    }
}

UI层调用Service层代码:

   IServices<Entity.OA.UserBase> iServices = null;
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎使用 ASP.NET MVC!";
            iServices = new Services<Entity.OA.UserBase>(new UserServices().UserBasesRepository);
            ViewData["UserBase"] = iServices.GetModelList().Cast<Entity.OA.UserBase>().ToList();
            return View();
        }
目录
相关文章
|
9月前
|
缓存 Java Spring
30个类手写Spring核心原理之Ioc顶层架构设计(2)
Annotation的代码实现我们还是沿用Mini版本的,保持不变,复制过来便可。
45 0
|
缓存 运维 架构师
架构之道:分离业务逻辑和技术细节
架构之道:分离业务逻辑和技术细节
444 1
架构之道:分离业务逻辑和技术细节
|
缓存 运维 架构师
应用架构之道:分离业务逻辑和技术细节
“让上帝的归上帝,凯撒的归凯撒。”
21065 0
应用架构之道:分离业务逻辑和技术细节
|
SQL 数据库
把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架
    更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。
1031 0