.NET管理层关系

Jam*_*Sun 5 c# generics asp.net-mvc entity-framework

我实际上是在重新创建项目的默认架构.在这篇文章中,我希望你不仅可以帮助我,还可以思考,讲述和改进现有方法.这可能是非常有用的挑战.此默认架构可以与所有人自由共享.所以这里是描述:基本上MVC是我们的观点.我们遵循OOP和层编程概念.我们还将使用SQL ServerEF DB First.所以这是我到目前为止所做的:我在我的解决方案中创建了4个层:

  1. 域:JUST域类
  2. DAL:负责访问数据,包含UOW和存储库以及与数据访问相关的验证.
  3. BL:独特负责业务逻辑和DAL的独特老板.
  4. UI:这不是那么重要!(甚至它可能是一个控制台应用程序!)

我已经使用像getAllgetById和crud func这样的泛型函数实现了BL.这些函数会调用DAL泛型函数,这也是准备好的.现在一个重要的问题是:将DAL函数实现为GENERIC是否正确?请考虑这种情况:

从UI我们发布模型到动作,在行动中我们称为BL Func(BL.insert(模型)).该BL.InsertFUNC会调用类似DAL.Add(模型)(注意BL将再次调用DAL并会告诉它想要的东西).现在,DAL.Addfunc必须将3条记录插入3个不同的表中(模型从UI层传递).我认为这不能通过DAL GENERIC funcs来实现.那么,在注意到关注点分离的情况下,实现图层和关系的正确和标准方法是什么?

在我的行动中我会:

[HttpPost]
public ActionResult Insert()
{ 
    Bl.EntityBase.Article.Insert(new Article()); 
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

在BL我会:

public void Insert(T obj)
{
    Da.Repository<T>().Insert(obj);
}
Run Code Online (Sandbox Code Playgroud)

在我的DAL中,我有:

public virtual void Insert(T entity)
{
    DbEntityEntry dbEntityEntry = Db.Entry(entity);
    if (dbEntityEntry.State != EntityState.Detached)
    {
        dbEntityEntry.State = EntityState.Added;
    }
    else
    {
        Set.Add(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

blu*_*lue 1

如果您通过 BL 传递到 DAL 的模型是视图模型,那么逻辑将位于您的 DAL 中,否则您不应该传递将为 3 个不同表执行 3 次插入的模型。