2012-05-03 67 views
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); 
} 

如果這將是一個網絡應用程序......那種編程會好嗎......或者可以那樣o f編程會造成一些麻煩嗎?...或者這是非常好的代碼:)

+0

我實在看不出什麼錯,但什麼是點創建靜態類?它似乎並沒有讓你感覺到任何地方。 – FishBasketGordo

+0

另外...這不是什麼一個存儲庫 –

+0

是的,我知道它不是存儲庫...也許查詢知識庫:)...我計劃在這樣的類中有一些更復雜的查詢,所以我可以經常使用它們如果我需要... – TheMentor

回答

3

正如柯克所說,我認爲唯一的收穫是次要的可讀性。但是,如果你在你的第一個參數前面加上this和使這是一個extension method,那麼你可能會獲得一些可讀性代碼的潛在讀者:

UPDATE

我也注意到,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部分是有爭議的,因爲該參數被命名爲id(並且它看起來多餘),但是隻有在使用智能感知進行編碼時纔會顯示。你可以離開它(或把它記下來,只是不By ... Id但留下太多的每個實施者IMO)

database.GetOneRowFromSomeTable(id); 
+0

@TheMentor我更新了我的答案btw,公共靜態類GetSomeTableRow不會工作...我假設你把類只是意味着ClassName? –

+0

是啊...我犯了一個錯誤...我直接鍵入代碼... ofcourse返回語句返回類... – TheMentor

5

該代碼在技術上是可以接受的,但爲什麼要這麼做呢?它不會使代碼更加簡潔,而是創造出一種間接方式。因此,你讓你的代碼難以讓大多數人理解。好處是你的代碼縮短了兩個字符。這對我來說似乎不是一場勝利。

我自己,我會使用標準的LINQ操作符,除非我真的添加一些實際的值。

+0

正如我所說的...也許對於更復雜的查詢,你需要他們不止一次在你的項目的不同領域... – TheMentor

+1

然後你的例子應該是一個更復雜的查詢。 –