繁体   English   中英

实体框架传递对静态类的引用

[英]Entity Framework passing reference to static class

每个人都知道

using (var db = new DatabaseEntites())
{
    var row = db.SomeTable.SingleOrDefault(r => r.Id == 5)
}

我打算用这样的静态方法创建一个静态类

public static class SomeTableRepository
{
   public static class GetSomeTableRow(DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

然后第一个代码将如下所示

using (var db = new DatabaseEntites())
{
    var row = SomeTableRepository.GetSomeTableRow(db, id);
}

如果这将是一个Web应用程序...这种编程可以吗...还是这种编程会引起一些麻烦?...或者这是完美的代码:)

该代码在技术上是可以接受的,但是为什么要这样做呢? 它创建了一个间接操作,而没有使代码实质上更简洁。 因此,大多数人很难理解您的代码。 好处是您的代码短了两个字符。 在我看来,这似乎不是胜利。

我本人会使用标准的LINQ运算符,除非我真正地添加了一些实际价值。

正如柯克所说,我认为唯一的好处就是可读性差。 但是,如果将其添加this第一个参数的前面并使其成为扩展方法 ,则可能为潜在的代码读者提供一些可读性:

更新

我还注意到public static class GetSomeTableRow无法编译。 我将其更改为对以后的读者来说更通用且不引起混淆( classYourClassName

public static class SomeTableRepository
{
   public static YourClassName GetSomeTableRow(this DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

...

database.GetSomeTableRow(id);

此外,您可以重命名此名称,使其看起来更像是实际的:

database.GetOneRowFromSomeTableById(id);

是的,它很长,但是抽象出诸如SingleOrDefault这样的简单方法的唯一原因是使代码一目了然。 ById部分值得商ById因为参数名为id (这使其显得多余),但是仅在使用intellisense进行编码时才会显示。 你可以离开它(或把它记下来,只是ById ......但还有太多的每个实施者IMO)

database.GetOneRowFromSomeTable(id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM