मैं बीडीडी/डीडीडी की खोज कर रहा हूं और परिणामस्वरूप रिपोजिटरी पैटर्न के उचित कार्यान्वयन के साथ आने का प्रयास कर रहा हूं। अब तक, इसे लागू करने के सर्वोत्तम तरीके से सर्वसम्मति को ढूंढना मुश्किल है। मैंने इसे निम्नलिखित भिन्नताओं तक उबालने की कोशिश की है, लेकिन मुझे यकीन नहीं है कि सबसे अच्छा तरीका कौन सा है।रिपोजिटरी पैटर्न को लागू करने का सबसे अच्छा तरीका?
संदर्भ के लिए मैं एक एएसपी.एमवीसी अनुप्रयोग का निर्माण एनएचबीरनेट के साथ बैक एंड के रूप में कर रहा हूं।
public interface IRepository<T> {
// 1) Thin facade over LINQ
T GetById(int id);
void Add(T entity);
void Update(T entity);
void Remove(T entity);
IQueryable<T> Find();
// or possibly even
T Get(Expression<Func<T, bool>> query);
List<T> Find(Expression<Func<T, bool>> query);
}
public interface IRepository<T> {
// 2) Custom methods for each query
T GetById(int id);
void Add(T entity);
void Update(T entity);
void Remove(T entity);
IList<T> FindAll();
IList<T> FindBySku(string sku);
IList<T> FindByName(string name);
IList<T> FindByPrice(decimal price);
// ... and so on
}
public interface IRepository<T> {
// 3) Wrap NHibernate Criteria in Spec pattern
void Add(T entity);
void Update(T entity);
void Remove(T entity);
IList<T> FindAll();
IList<T> FindBySpec(ISpecification<T> specification);
T GetById(int id);
}
public interface IRepository<T> {
// 4) Expose NHibernate Criteria directly
T GetById(int id);
void Add(T entity);
void Update(T entity);
void Remove(T entity);
IList<T> FindAll();
IList<T> Find(ICriteria criteria);
// .. or possibly
IList<T> Find(HQL stuff);
}
मेरे प्रारंभिक विचार हैं कि
1) देखने का एक दक्षता बिंदु से महान है, लेकिन के रूप में चीजों को अधिक जटिल हो मैं मुसीबत में हो सकता है।
2) बहुत थकाऊ लगता है और बहुत भीड़ वाले वर्ग के साथ समाप्त हो सकता है, लेकिन अन्यथा मेरे डोमेन तर्क और डेटा परत के बीच उच्च स्तर की अलगाव प्रदान करता है जो मुझे पसंद है।
3) प्रश्न लिखने के लिए सामने और अधिक काम मुश्किल लगता है, लेकिन केवल चश्मा परत को पार संदूषण सीमित करता है।
4) जटिल प्रश्नों के लिए मेरा सबसे कम पसंदीदा, लेकिन संभवतः सबसे प्रत्यक्ष कार्यान्वयन और संभावित रूप से अधिकांश डेटाबेस कुशल, हालांकि यह कॉलिंग कोड पर बहुत ज़िम्मेदारी रखता है।
+1। मैंने रिपोजिटरी पैटर्न के साथ भी संघर्ष किया है। – TrueWill
शायद आप जो खोज रहे हैं वह नहीं, लेकिन मुझे स्पेक पैटर्न का यह कार्यान्वयन वास्तव में अच्छा लगता है: http://mathgeekcoder.blogspot.com/2008/07/advanced-domain-model-queries-using.html। मुख्य रूप से क्योंकि यह आपको Linq2Sql/Linq2NHibernate/आदि का उपयोग करने देता है। –
धन्यवाद ट्रूविल और धन्यवाद मार्टिन्हो, जो वास्तव में हाल ही में http: // stackoverflow पोस्ट किए गए किसी अन्य विषय से बहुत अच्छी तरह से संबंधित है।कॉम/प्रश्न/1408553/विनिर्देश-पैटर्न-बनाम-spec-in-bdd –