ASP.NET MVC - 数据和对象层之间的抽象

时间:2014-02-15 21:59:29

标签: asp.net asp.net-mvc dbcontext

我在Visual Studio 2013中使用ASP.NET EntityFramework MVC(All Latest)。

我试图想出一种统一的方法来标准化我的对象和数据层之间的抽象。

我知道很多人都喜欢将IRepository模式与MVC一起使用。我最大的问题是它会强制您为要维护的每个对象创建和维护第二个对象类型(存储库)。我的解决方案是将IRepository方法与静态工厂模式结合起来构建一个静态存储库,例如:

public class SiteDatabase : DbContext
{
    // Singleton
    private static SiteDatabase _Instance;
    public static SiteDatabase Instance
    {
        get
        {
            if (_Instance == null)
            {
                _Instance = new SiteDatabase();
            }
            return _Instance;
        }
    }

    public DbSet<User> Users { get; set; }

}


public class User : IUser
{
    public static User Create(string UserName)
    {
        User item = new User();
        item.UserName = UserName;
        SiteDatabase.Instance.Users.Add(item);
        return item;
    }

    public static User Find(string UserName)
    {
        return SiteDatabase.Instance.Users.SingleOrDefault(x => x.UserName == UserName);
    }

    public static User[] All()
    {
        return SiteDatabase.Instance.Users.ToArray();
    }


    public string Id { get; set; }
    public string UserName { get; set; }

    protected User()
    {
        Id = Guid.NewGuid().ToString();
    }

    public void Delete()
    {
        SiteDatabase.Instance.Users.Remove(this);
    }
}

public class Page
{
    public static Page Create(string PageName)
    {
        ...
    }

    public static Page Find(string PageName)
    {
        ...
    }

    public static Page[] All()
    {
        ...
    }

    ...

    public void Delete()
    {
        ...
    }
}

我的问题是:这种模式会让我错过正常的存储库模式允许我捕获的任何内置功能吗?

可以使用接口处理非静态方法,但静态方法呢?有没有办法让一个基类确保派生类中存在静态方法?

0 个答案:

没有答案