我实际上是在重新创建项目的默认架构.
在这篇文章中,我希望你不仅可以帮助我,还可以思考,讲述和改进现有方法.这可能是非常有用的挑战.
此默认架构可以与所有人自由共享.
所以这里是描述:
基本上MVC是我们的观点.我们遵循OOP和层编程概念.我们还将使用sql Server和EF DB First.
所以这是我到目前为止所做的事情:
我在我的解决方案中创建了4个图层:
>域:JUST域类
> DAL:负责访问数据,包含UOW和存储库以及与数据访问相关的验证.
> BL:独特负责业务逻辑和DAL的独特老板.
> UI:这不是那么重要! (甚至它可能是一个控制台应用程序!)
我已经使用通用函数实现BL,如getAll和getById以及crud funcs.these funcs将调用DAL通用函数,这也是准备好的.
现在一个重要的问题是:将DAL函数实现为GENERIC是否正确?
请考虑这种情况:
从UI我们发布模型到动作,在行动中我们称为BL Func(BL.insert(模型)). BL.Insert函数会调用类似DAL.Add(模型)的东西(注意BL将调用DAL一次并告诉它它想要什么).现在,DAL.Add func必须将3条记录插入3个不同的表中(模型从UI层传递).
我认为这不能通过DAL GENERIC funcs来实现.那么,在注意到关注点分离的情况下,实现图层和关系的正确和标准方法是什么?
在我的行动中我会:
[HttpPost]
public ActionResult Insert()
{
Bl.EntityBase.Article.Insert(new Article());
return RedirectToAction("Index");
}
在BL我会:
public void Insert(T obj)
{
Da.Repository
在我的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);
}
}
最佳答案
如果您通过BL传递给DAL的模型是视图模型,则逻辑将在您的DAL中,否则您不应传递将为3个不同的表执行3次插入的模型.