Здравствуйте, IT, Вы писали:
IT>Даже две связи. Первая с IObjectMapper. Вторая со статическим методом MapperFactory.GetMapper. Причём, если первую связь ещё можно как-то пережить, то вторая порождает бинарную зависимость класса Object от MapperFactory, т.е. Object нельзя использовать без MapperFactory.
Что бы разорвать эту связь нужно при создании или во время инициализации Object каким-то образом передать ему ссылку на IObjectMapper. Что-нибудь типа:
interface IObjectMapper
{
void Save(Object o);
}
class Object
{
public Object(IObjectMapper mapper)
{
_mapper = mapper;
}
IObjectMapper _mapper;
public void Save()
{
_mapper.Save(this);
}
}
В принципе, вариант более менее рабочий. Связь только с абстрактным интерфейсом, который может быть реализован по разному в разных случаях. Но проблема в том, что этот вариант довольно громоздкий. Предположим IObjectMapper имеет не один, а десять методов связанных с Object. При использовании Object в другом окружении нам нужно будет реализовать, пусть даже как throw new NotImplementedException, все десять методов. В случае использования внешнего по отношению к Object объекта ObjectManager, нам нужно будет реализовать в новом окружении только то, что необходимо в этом окружении. И как правило это совершенно другой набор методов.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>