首页新闻找找看学习计划

Prodinner项目里 这样子作有什么好处

0
[待解决问题]

using System.Collections.Generic;
using System.Data.Entity;
using Omu.ProDinner.Core.Model;
using Omu.ProDinner.Core.Repository;

namespace Omu.ProDinner.Data
{
    public class UniRepo : IUniRepo
    {
        private readonly DbContext c;

        public UniRepo(IDbContextFactory a)
        {
            c = a.GetContext();
        }

        public void Insert<T>(T o) where T : Entity
        {
            c.Set<T>().Add(o);
        }

        public void Save()
        {
            c.SaveChanges();
        }

        public T Get<T>(int id) where T : Entity
        {
            return c.Set<T>().Find(id);
        }

        public IEnumerable<T> GetAll<T>() where T : Entity
        {
            return c.Set<T>();
        }
    }
}

 

 

为什么要用泛型呢? 指明类型不好吗?

wunaigong的主页 wunaigong | 初学一级 | 园豆:4
提问于:2011-10-28 15:16
< >
分享
所有回答(3)
0

这个问题基本上可以当作“泛型有什么好处”来回答。很明显你的例子中,Entity可能是任何数据库对象的映射,比如UserEntity(表示一个User,对应数据库表Users中的一行),OrderEntity等。泛型的好处就是做到算法上的归纳。比如你要新建一个用户,就是c.Set<User>.Add(user); 新增一个订单,就是c.Set<Order>.Add(order); 使用泛型T之后,Insert方法可以处理所有类似的情况,一句c.Set<T>.Add(o); 就可以了。如果指定类型,那么几乎同样的代码对User和Order要分别实现一遍,做了重复劳动并且不利于维护。当然了,如果User和Order的插入逻辑不同(也就是说无法做到算法上的归纳),那就要分开实现了。

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-10-28 15:27
0

简单的讲,用泛型的好处就是做到算法重用。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2013-08-08 10:32
0

Good.

我最近也在学习prodinner:

http://blog.csdn.net/lvjin110/article/details/10011543

吕津 | 园豆:31 (初学一级) | 2013-08-17 02:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册