【问题标题】:How should I name database wrapper object?我应该如何命名数据库包装对象?
【发布时间】:2011-04-14 02:46:19
【问题描述】:

对于我的 CMS 应用程序,我正在编写一个将包含在我的项目中的 DLL。该 DLL 将包含检索特定项目的所有新闻等功能。

例如,我的数据库包含一个名为 News 的表。通过使用 Entity Framework 4,我有一个名为 News 的自动生成类。我不希望我的 DLL 方法返回这个对象,而不是只包含属性的包装类。

我应该如何命名这个包装类? 现在我总是在后面加上“Container”这个词,但随着时间的推移,我确实不喜欢这个后缀。意思是,我现在将这个类命名为 NewsContainer

当然,我也可以将这个包装类命名为News。这会起作用,因为我在两个单独的命名空间中有两个类,但我不想将两个不同的类命名为相同的。可以吗,不同类的两个名称相同吗?我问这个是因为 News 实际上是最合适的名称。

编辑:我会手动映射我自己的包装类和自动生成的实体框架类之间的属性,如果这很重要的话。

【问题讨论】:

  • 这里的“新闻”类是你的领域模型类还是你的对象上下文?你说你想返回一个只包含属性的类,所以我不清楚你在说什么,因为生成的域模型应该已经“只有属性”了。
  • 是的,这两个类都只包含属性。但不知何故,我觉得将对象上下文类暴露给其他项目并不好。例如,我可以为我自己的类添加额外的属性。我想 EF4 也可以,但我还没有弄清楚,但这更多地与这个问题有关 stackoverflow.com/questions/3630653/…

标签: c# asp.net entity-framework-4 wrapper


【解决方案1】:

听起来您正在创建 DTOs,在这种情况下,它可能是 NewsDto 或 NewsDTO 之类的东西?

【讨论】:

    【解决方案2】:

    我同意您将包装器/DTO 类的初始命名为News。将它们保存在具有相同名称的单独名称空间中是非常好的。这就是命名空间的一部分用途:减少命名冲突。

    我会画出这样的东西

    namespace MyCmsApp.Models
    {
        public class News {
            public string Title { get; set; }
            public string Body { get; set; }
            public string Author { get; set; }
        }
    }
    

    然后我会让 DataLayer 只返回 MyCmsApp.Models 中的类型。换句话说,正如您所建议的,EF 生成的类不会跨入您的应用程序中。

    旁注:您为什么要避免使用 EF 类?你会考虑code-first 和/或模型优先设计吗?在这些情况下,数据库会屈服于您应用程序的对象模型设计。

    【讨论】:

    • 模型优先,因为我一直以这种方式创建应用程序。除了 DataContext 之外,我仍然无法使用实体框架。我很难开始,你可以在这里见证:stackoverflow.com/questions/3700637/…我缺少一本好书或在线教程?你能推荐一个吗?
    【解决方案3】:

    侧边栏:“新闻”已经很麻烦了,因为它是一个保留字,并且有奇怪的复数问题,即:new new,new news, newnews, new NewNews()。

    临时术语需要额外的步骤来解释意图或上下文,这会使您和其他人对设计的使用感到困惑。

    在您的示例中,您指的是 NewsArticle、NewsFlash、NewsSnippet 还是 NewsEntry?项目有新闻吗?有没有像 NewsContainer 这样的东西?在我看来,NewsWrapper 可能是一个塑料袋,甚至是一条松紧带。

    粗略翻译的 n-tier 可能看起来像...

    UI.ProjectNews (presentation)
    DTO.ProjectNews
    POCO.ProjectNews (logic)
    DTO.ProjectNews
    EF.ProjectNews (data)
    

    根据我的经验,设计任何数据库架构或类设计的最佳方式是像在正常对话中那样引用事物。现实世界中的术语极大地促进了生产力、开发时间、维护和协作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2022-07-19
      • 2019-10-04
      相关资源
      最近更新 更多