一直在工作一段時間,基本上它是C#和Mysql作爲服務器端系統的組合。由於性能問題,我將代碼ADO.NET交給我的mysql查詢,但我面臨一個問題,因爲我想減少需要編寫的代碼量。在c#中減少重複類似的方法
比方說
ItemService類有方法(下面的代碼只是一個例子)
protected internal List<Item> Read()
{
List<Item> itemList = new List<Item>();
String query = @"SELECT * FROM items";
itemList = IRead(query);
return itemList;
}
protected internal Item Read(int id)
{
List<Item> itemList = new List<Item>();
Item item = new Item();
String query = String.Format(@"SELECT * FROM items WHERE id = {0}", id);
itemList = IRead(query);
item = itemList.FirstOrDefault();
return item;
}
protected internal List<Item> Read(int startId, int limit, String orderBy = "id", String order = "ASC")
{
List<Item> itemList = new List<Item>();
String query = String.Format(@"SELECT * FROM items WHERE id >= {0} ORDER BY '{1}' '{2}' LIMIT {3}", startId, orderBy, order, limit);
itemList = IRead(query);
return itemList;
}
而且OrderService類具有非常相似的方法
protected internal List<Order> Read()
{
List<Order> orderList = new List<Order>();
String query = @"SELECT * FROM items";
orderList = IRead(query);
return orderList;
}
protected internal Order Read(int id)
{
Order order = new Order();
String query = String.Format(@"SELECT * FROM invoices WHERE id = {0}", id);
order = IRead(query).FirstOrDefault();
return order;
}
我想到的是使用抽象類,但我如何處理不同的返回對象(動態除外)以及方法內部的不同字符串查詢。非常感謝您的幫助。
你可以看看[Dapper](https://github.com/StackExchange/dapper-dot-net)。這些查詢似乎很簡單,我認爲這不屬於您的性能問題。您應該使用ORM,然後僅在性能問題的情況下,才能使用原始SQL。大多數ORM可以處理你通過它們傳遞原始的sql。 – Prescott
@Prescott感謝您的評論,我確實瞭解了Dapper,我知道性能接近於經典的ado.net,但是這個項目已經持續了一段時間,很難切換(耗時),而且我仍然還沒有完全掌握Dapper。除了ORM之外,還有其他方法嗎? –
Dapper不是ORM,您只需使用它而不是手動編寫SQL。除此之外,您可能正在尋找一個存儲庫模式,並且您可能會創建一個通用基礎存儲庫,用於所有實體將共享的基本CRUD操作。請注意,[Dapper Extensions](https://github.com/tmsmith/Dapper-Extensions)基本上爲您提供了在基本Dapper查詢之上的CRUD功能,這意味着您可以輕鬆實現基本回購。 – Groo