我该如何命名数据库包装器对象?

时间:2010-09-18 14:49:05

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

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

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

我应该如何命名这个包装类? 现在我总是附加“容器”这个词,但是当时我不喜欢这个后缀。意思是,我现在将这个类命名为 NewsContainer

当然,我可以将此包装类命名为新闻。这可以工作,因为我在两个单独的命名空间中有两个类,但我不想将两个不同的类命名为相同。是没关系,两个名字到不同的班级一样吗?我问这个,因为新闻实际上是最合适的名字。

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

3 个答案:

答案 0 :(得分:3)

听起来你正在创建DTOs,在这种情况下,它可能像NewsDto或NewsDTO?

答案 1 :(得分:1)

我同意您将包装器/ 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和/或模型优先设计吗?在这些情况下,数据库会弯曲到应用程序的对象模型设计。

答案 2 :(得分:1)

补充:侧栏:“新闻”已经很麻烦,因为它是一个保留字,它有奇怪的多元化问题,即:新的新消息,新消息,新消息,新的新闻()。

临时术语需要额外的步骤来解释意图或上下文,这使得设计工作与您和其他人一样令人困惑。

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

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

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

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

相关问题