के विभिन्न वस्तुओं को बनाने के मैं 1 इंटरफेस है:फैक्टरी एक ही इंटरफ़ेस
public interface ISummary
{
int EventId {get; set;}
}
और कई ठोस वर्ग है कि इस इंटरफ़ेस को लागू:
public class EmployeeSummary : ISummary
{
public int EventId {get; set;},
public int TotalUniqueCount {get; set;}
public int Location {get; set;}
}
public class CarSummary : ISummary
{
public int EventId {get; set;}
public int TotalMiles {get; set;}
public int TotalHours {get; set;}
}
आदि ....
केवल साझा संपत्ति EventId
है। क्या 1 फैक्टरी विधि है जो इन सभी सारांश वस्तुओं को बनाता है? मुझे 1 एंट्री पॉइंट चाहिए जो तय करता है कि कौन सी ऑब्जेक्ट्स बनाना है।
तो कुछ की तरह:
public ISummary CreateSummary(ConcreteObjectType with properties)
{
if EmployeeSummary
--Call this method to create and return EmployeeSummary
if CarSummary
--Call this method create and return CarSummary
}
मैं अन्य वर्गों के भीतर सभी कॉल नहीं बल्कि खुद वस्तुओं बनाने की तुलना में इस विधि कॉल करना चाहते हैं।
जिस भाग के साथ मैं संघर्ष कर रहा हूं वह है कि मैं इस CreateSummary
विधि को ऑब्जेक्ट्स को असाइन करने के लिए गुणों को कैसे पास करूं क्योंकि ऑब्जेक्ट्स पर सभी गुण अलग होंगे?
मैं इस बिंदु पर वस्तुओं को बदलने के लिए खुला हूं अगर बेहतर डिजाइन पैटर्न है तो मुझे यहां उपयोग करना चाहिए।
public class SummaryFactory
{
// new instance with values assigned by action delegate or default
public T Create<T>(Action<T> action = null) where T : ISummary, new()
{
var result = new T();
action?.Invoke(result);
return result;
}
// with object to assign value from (map)
public T Create<T>(object map) where T : ISummary, new()
{
var result = new T();
PropertyInfo[] props = map.GetType().GetProperties();
PropertyInfo[] tProps = typeof(T).GetProperties();
foreach (var prop in props)
{
var upperPropName = prop.Name.ToUpper();
var foundProperty = tProps.FirstOrDefault(p => p.Name.ToUpper() == upperPropName);
foundProperty?.SetValue(result, prop.GetValue(map));
}
return result;
}
// new instance without generic parameters
public object Create(Type type)
{
var result = Activator.CreateInstance(type);
// add all logic that you need
return result;
}
}
और अब आप इस कारखाने का उपयोग कर सकते हैं::
आप गुण आप चाहते हैं – Nkosi