每个人都知道这个
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);
}
如果这是一个网络应用程序...那种编程是否可以......或者那种编程会造成一些麻烦?...或者这是非常好的代码:)
答案 0 :(得分:5)
代码在技术上是可以接受的,但为什么要这样做呢?它创造了一种间接性,而不会使代码更加简洁。因此,您的代码难以让大多数人理解。好处是你的代码缩短了两个字符。这似乎不是我的胜利。
我自己,我会使用标准的LINQ运算符,除非我真正增加了一些真正的价值。
答案 1 :(得分:3)
正如柯克所说,我认为唯一的好处是可读性很小。但是,如果您在第一个参数前添加this
并将其设为extension method,那么您可能会为潜在的代码读者获得一些可读性:
<强>更新强>
我也注意到public static class GetSomeTableRow
无法编译。我将其更改为更通用,更不会让未来的读者感到困惑(class
到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
(它使它看起来多余),但是只有在使用intellisense进行编码时才出现。您可以将其删除(或者将其归结为By
而不使用Id
...但这对于每个实施者IMO而言都会留下太多差距。
database.GetOneRowFromSomeTable(id);