Re[28]: Некоторые мысли о LINQ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 09.01.09 12:17
Оценка:
Здравствуйте, Tissot, Вы писали:

S>>Вот только что в нашем продукте напоролись: встроенная валидация хочет не более 8 символов для зипкода. В Иране — 10. Прощай, инвариант.


T>Не прощай инвариант, а здравствуй domain model. Кроме zip-кода надо проверить еще и страну и в зависимости от страны выбирать ту или иную стратегию валидации.


Вот на этом месте начинают сыпаться все преимущества Domain Model.

Представляем себе код:
public class Customer
{
  private ZipCodeValidationStrategy _zipCodeValidationStrategy;

  ...
  public string ZipCode
  {
    get {return _zipCode;}
    set
    {
      if(_zipCodeValidationStrategy.Validate(value))
      {
         _zipCode = value;
      }
    }
  }
}

Вот теперь вопрос, как кастомер получает zipCodeValidationStrategy? Сам класс инстанцировать zipCodeValidationStrategy не может потому что от страны, а страна хранится где-то еще.
Это значит маппер должен уметь инжектить переданный ему инстанс стратегии в создаваемую сущность. С другой стороны при ручном создании инстанса надо инжектить такуюже стратегию.
Учитывая что не все мапперы позволяют перехватывать процесс создания объектов получается не очень хорошо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.