【问题标题】:MVC, Entity Framework, Business LogicMVC、实体框架、业务逻辑
【发布时间】:2011-04-15 09:15:31
【问题描述】:

虽然我相信我对 MVC(来自 Rails)有很好的掌握,但我正在学习使用 ASP.NET MVC 的“MS Way”。

另外,我也在学习实体框架。

我在我的 Models 文件夹中创建了一个名为 User 的实体。使用 LINQ to EF 我可以检索记录,一切都很好。

现在,我想将一些业务(或我所说的领域)逻辑放入其中。但在我看来,EF 更像是 DAL。所以我创建了一个名为“Domain”的文件夹,并在其中为一些业务规则创建了一个类。

其中之一是加密密码。

所以我可以在我的控制器中使用以下内容:

string password = Domain.User.EncryptPassword(string salt, string password);

另外,这意味着域逻辑可以在需要持久化到数据库时访问 EF 用户。

这个逻辑合理吗?

任何建议表示赞赏。

谢谢!

【问题讨论】:

  • 你的问题到底是什么?
  • 顺便说一句,我说的是“加密密码”。我的意思是哈希。有趣的是,我实际上正在重写一个为我们完成的旧系统,其中密码被加密。我使用具有良好盐值的 SHA256。

标签: asp.net-mvc entity-framework business-logic


【解决方案1】:

我唯一要问的是:“为什么一个用户,一个人,知道如何加密或散列密码?”

加密密码是应用层的一部分。这几乎是反 DDD。

【讨论】:

  • 我不会加密密码。问的时候打错字了。
  • @cbmeeks - 答案保持不变。这是应用层的问题。
【解决方案2】:

这取决于项目,但通常我们:

  • 不要在 EF 模型中放置任何代码,所有模型都存储在单独的项目中
  • 在 MVC 代码和 EF 之间放置一个业务层。在以前的 EF 版本中,这将用于将 EF 对象映射到域对象,但对于 POCO,这不再需要。任何缓存都将在这一层完成。
  • 使用帮助程序或实用程序类进行加密

【讨论】:

    【解决方案3】:

    我认为您正在寻找的是 POCO(普通旧 CLR 对象)。一方面,你有你的 EF 实体。另一方面,您拥有域或业务实体...然后您可以映射它们...您的 DAL 层必须返回 POCO 实体而不是 EF 实体.. 至少在 3 层应用程序中是这样制作的。我想这与 MVC 应用程序中的方法相同......

    我说的对吗?

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 2012-03-08
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      相关资源
      最近更新 更多