В рабочем проекте у нас есть определенный класс типов значений в нашей модели предметной области, который включает в себя очень большое количество атрибутов ...
public class BigValueType {
private Foo foo;
private Bar bar;
private Baz baz;
//...
}
Мы поняли, что хотели бы «сфокусировать» это на ряде различных, несколько более специализированных классов, которые имеют только некоторое подмножество атрибутов этого класса. Я думаю, что мы хотели бы иметь что-то вроде разных «представлений» этих данных.
public class SpecializationA {
private Foo foo;
private Baz baz;
//...
}
public class SpecializationB {
private Bar bar;
private Baz baz;
//...
}
private class SpecializationC {
private Foo foo;
private Bar bar;
//...
}
Однако эта модель предметной области должна быть довольно общей и не специфичной для данного проекта. В будущих проектах к нему будут добавлены специфичные для проекта расширения, но модель общего домена будет отделена от этих расширений. Если мы сейчас просто определим группу классов, вполне вероятно, что другие проекты, использующие модель предметной области, просто позже должны будут написать свои собственные немного другие. (Мы не можем легко предсказать, какие виды этих данных будут полезны.)
Я думаю, что нам следует написать специфичные для проекта Адаптеры для этого большого класса, которые представляют различные представления данных. Таким образом, будущим пользователям домена не нужно ничего трогать в «общей» модели домена, чтобы определить новые представления этой информации.
public class AdapterA {
private BigValueType wrapped;
//...
public ViewA(BigValueType wrapped) {
//...
}
public Foo getFoo() {
return wrapped.getFoo();
}
//...
}
Это имеет для меня больше смысла, чем обычное наследование, потому что в нашем классе / интерфейсе верхнего уровня почти ничего не будет.
Есть ли какие-либо отзывы об этом подходе?