0

这个大家都知道

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);
}

如果这将是一个网络应用程序...这种编程会好吗...或者这种编程会引起一些麻烦吗?...或者这是非常好的代码:)

4

2 回答 2

5

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

我自己,我会使用标准的 LINQ 运算符,除非我真的增加了一些真正的价值。

于 2012-05-03T14:25:35.387 回答
3

正如柯克所说,我认为唯一的好处是可读性很小。但是,如果您this在第一个参数之前添加并使其成为扩展方法,那么您可能会为您的代码的潜在读者获得一些可读性:

更新

我也注意到public static class GetSomeTableRow不会编译。我将其更改为更通用,对未来的读者来说更少混淆(classto YourClassName

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部分是值得商榷的,因为该参数被命名id(这使得它看起来是多余的),但是只有在使用智能感知编码时才会出现。您可以将其排除在外(或将其简化为By没有Id...但是对于每个实施者IMO来说都太多了)

database.GetOneRowFromSomeTable(id);
于 2012-05-03T14:27:35.313 回答