【问题标题】:Creating good interfaces, what should be included and what should be left out创建好的界面,应该包含什么,应该省略什么
【发布时间】:2009-11-19 05:07:03
【问题描述】:

我正在 2 年内第三次更新网站,看起来这将一直发生,并且多个网站正在使用同一个数据库。我想对所有这些都使用相同的代码,并使其在将来易于更新。所以我打算写一些接口,然后将业务登录放在一个服务中,以保持整体一致,并添加一些单元测试。

所以我正在查看我当前的存储库,我不确定我的界面中应该有什么以及我的服务中应该有什么。

例如,我有一个 Add 方法 - 毫无疑问,我在界面中有一个 Add,在 Service 中有一个 add。

然后我有一个带有 3 个参数的 AuthenticateAccountManager 方法,它应该在两个参数中还是只是在服务中,并且在我的界面中有一个简单的 Get 方法(比如通过用户名),然后针对服务中的其他 2 个属性进行验证.

我还有一个将 bool 设置为 true 的 QualifyPartner,这应该只是在服务中,并且在我的接口中再次有一个简单的 Get 方法,尽量保持它尽可能小吗?

【问题讨论】:

    标签: asp.net architecture interface


    【解决方案1】:

    遵循Separation of Concerns 原则-AuthenticateAccountManager 是服务级操作。它应该调用您的存储库,这将返回原始用户数据。然后,该服务根据存储库返回的内容进行身份验证或不进行身份验证。

    一般准则是存储库只负责数据的检索和提交。根据数据解释和执行行为是业务逻辑。

    【讨论】:

    • 所以我有大约 20 个相关表,现在我需要我的服务与其中一个相关表进行交互,我是向当前接口添加方法还是为这个新表创建一个新接口?如果是这种情况,我的服务将以疯狂的界面疯狂告终——我该如何决定该做什么?
    • 这是 OR/M 工具有很大帮助的地方。让 Entity Framework 或 Mindscape Lightspeed 为您生成存储库。
    • PS- 如果你使用实体框架,这里有一个很好的基于泛型的 EF 存储库:codeproject.com/KB/database/ImplRepositoryPatternEF.aspx
    • 那么你又被绑定到一个 ORM 并再次紧密耦合,不是吗?
    • 如果你不想花几个小时写样板,你必须忍受 一些 耦合。
    猜你喜欢
    • 2011-08-18
    • 2012-05-26
    • 2015-09-13
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多