У меня возникли проблемы с правильной разработкой объектов домена. Проблема, с которой я держусь, - это заполнить мои объекты домена данными. Примеры, которые я нашел, были тривиальными, чтобы действительно помочь мне. Я пробовал различные методы, но я не люблю их. Скажите, что у вас есть большой набор данных, которые вам нужно передать в ваш класс, чтобы вы связали его в POCO.Заполнение объектов домена корректно?
Моего первое направление (передать данные в конструктор):
public class MyClass
{
private readonly ICalculator _calculator;
private readonly MyClassDataPOCO _data;
public MyClass(ICalculator _calculator, MyClassDataPOCO data)
{
this._calculator = _calculator;
_data = data
Это не работает хорошо, потому что тогда ваши контейнеры МОК не могут автоматически инициализировать классы.
Второе направление (передать данные в эксплуатацию):
public class MyClass
{
private readonly ICalculator _calculator;
public MyClass(ICalculator _calculator)
{
this._calculator = _calculator;
}
public decimal CalculateComplicatedValue1(MyClassDataPOCO data)
{
}
public decimal CalculateComplicatedValue2(MyClassDataPOCO data)
{
}
мне не понравилось это по разным причинам
- Ваш класс не стал ничего больше функций экземпляра (не действительно классы). У них только поведение, а не данные.
- Ваша доверенность вашего клиента на ваши данные. Не похоже на умную идею. Я уверен, что вы в конечном итоге столкнетесь с мутировавшимися проблемами государства.
Третье направление (возможно только ты класс должен быть создан через статический фабричный метод):
public class MyClass
{
private readonly ICalculator _calculator;
private MyClassDataPOCO _data;
private MyClass(ICalculator _calculator)
{
this._calculator = _calculator;
}
public static MyClass Create(MyClassDataPOCO data)
{
return Create(_container.GetInstance<ICalculator>(), data);
}
public static MyClass Create(ICalculator calculator, MyClassDataPOCO data)
{
//do some input validation here
var myReturn = new MyClass(calculator);
myReturn._data = data;
return myReturn;
}
Я думаю, из всех вариантов я люблю это одно лучшее. Единственное, что мне не нравится, - это иметь две функции создания, чтобы их можно было тестировать на единицу (так что я могу добавить ICalculator).
Единственный вариант, который я не пробовал, - это инъекция свойств, потому что id не думал, что было бы неплохо вводить ваши данные через свойства.
Автомобиль подходит для вашего случая? Так что вы можете инкапсулировать логику популяции данных внутри профилировщика картографа или вводить через ioc в качестве зависимости. Если не подходит, я бы хотел знать, почему именно – Ming
@ming. Я не понимаю, что вы получаете здесь на 100%. Я никогда не использовал automapper, но я думаю, что понимаю основные понятия (конвертировать из одного типа данных в другой). Как это мне помогает? – coding4fun