मैं, उदाहरण आप लिंक किए गए पसंद नहीं आया नीचे मैं कारणों को सूचीबद्ध:
- मैं मानता हूँ कि बने वास्तुकला एक मेस होगा - मेरी राय में गंदा करने के लिए जिस तरह से।
- प्रति राज्य नया उदाहरण बनाना मुझे दक्षता आत्मघाती पैटर्न की तरह लगता है।
- परीक्षण नरक होगा ... त्रुटियों को ढूंढना नरक होगा .. डिबगिंग नरक होगा।
- अनुभव के 30 से अधिक वर्षों में मैंने कभी भी इस पैटर्न को डेटा केंद्रित अनुप्रयोग में कभी भी इस्तेमाल नहीं किया - मैंने इसे देखा और उन मामलों में इसका इस्तेमाल किया जहां मुझे जानकारी जारी रखने की आवश्यकता नहीं है, उदाहरण के लिए जब नेटवर्क परत बनाना - प्रति बंदरगाह के साथ इस बंदरगाह का इलाज किया जा सकता है।
मैं बजाय इस पैटर्न के लिए जाना होगा:
पैटर्न बुनियादी ढांचे कुछ छद्म आदेश वस्तु के लिए
public interface IStateObject<T>
{
T State { get; set; }
void Process();
}
उदाहरण कार्यान्वयन
public enum OrderState
{
Taken,
Approved,
Payed,
Emailed,
BeforeShipment
//etc.. etc..
}
public class Order : IStateObject<OrderStates>
{
//some linear fields of order..
//: name, description, etc.. etc..
public OrderStates State { get; set; }
public void Process()
{
switch (State)
{
case OrderState.Taken:
// code to handle this state
break;
case OrderState.Approved:
// etc..
break;
}
//persist myself to db.
}
}
यह बहुत आसान है क्योंकि आप वस्तु के प्रति संदर्भ प्रति पंक्ति को एक पंक्ति में सहेज सकते हैं।
इसके अलावा एक ऑब्जेक्ट एक बार बनाया गया है जैसा कि हमारे पास हमारे पास कोई कंप्यूटर नहीं था ..
लेकिन अधिकतर क्योंकि यह बहुत सीधी और बहुत लचीला है।
आप आप वास्तव में नोटिस की जरूरत नहीं हो सकता है हो सकता है IStateObject<T>
बिल्कुल - लेकिन मैं बहस आप इसे बाद में जब आप खड़ी निर्णयों पर कार्रवाई करने के लिए चाहते हैं पर की आवश्यकता होगी होगा। ध्यान रखें कि T
को enum होना आवश्यक नहीं है। यह आपकी ऐप जरूरतों के अनुसार विकसित होने के लिए सामान्य आधार के रूप में काम कर सकता है।
आगे गंदगी,
मैं इस जवाब की शुरुआत में उल्लेख किया है का कहना है करने के लिए मान लीजिए कि हम आदेश के पिछले राज्यों को इतिहास है करना चाहते हैं:
पैटर्न इस जवाब में की पेशकश का उपयोग करना - आप जोड़ना एक पिछली ऑर्डरस्टेट संपत्ति और अब आपके पास प्रति पंक्ति इतिहास है .. और अन्य तरीकों से मुझे यकीन है कि आप सोच सकते हैं ..
लेकिन "राज्य पैटर्न" का उपयोग करके - आप गंभीर समस्या में होंगे ... यह होगा वास्तव में ऐसा करने के लिए एक पूर्ण "पैमाने स्तर" द्वारा जटिल होने जा रहा है .. आपको प्रत्येक प्रकार की तालिका से प्रत्येक प्रकार की अन्य तालिका में लिंक करने में सक्षम होना होगा - या tr y आपके डेटाबेस पर ऑब्जेक्ट ओरिएंटेड बल को मजबूर करने के लिए ...
मेरा मुद्दा देखें? राज्य पैटर्न केवल डेटा केंद्रित ऐप्स के लिए डिज़ाइन नहीं किया गया है।
गुड लक।
स्रोत
2014-05-27 14:03:08
आपका लिंक टूटा हुआ है। – Tanner