Предположим, мне нужно написать Wrapper для стороннего класса, который я не могу изменить.Это изменение улучшает мой дизайн в отношении Закона Деметры?
интерфейс класса выглядит следующим образом
class Rewriter {
public List<Mapping> getMappings();
}
Обертка выглядит как этот
class RewriterSpec {
private final Rewriter rewriter;
public RewriterSpec(Rewriter rewriter) {
this.rewriter = rewriter;
}
public addMapping(Mapping m) {
rewriter.getMappings().add(m);
}
}
Так от моего понимания RewriterSpec
нарушает Закон Деметры, поскольку она требует структурных знаний о Rewriter ,
Теперь вопрос: было бы лучше с точки зрения дизайна и тестирования просто перейти в список сопоставлений?
class Rewriter {
public List<Mapping> getMappings();
}
Обертка выглядит следующим образом
class RewriterSpec {
private final Rewriter rewriter;
public RewriterSpec(List<Mapping> mappings) {
this.mappings = mappings;
}
public addMapping(Mapping m) {
mappings.add(m);
}
}
Это нормально, чтобы просто передать список по ссылке?
Привет @ luc14n0 в целом это хороший совет, но, к сожалению, я не могу изменить интерфейс ReWriter. – helpermethod
Учтите, что класс Rewriter не модифицируется. – jakubbialkowski
Возможно, вы можете расширить конструктор RewriterSpec, чтобы также присвоить ссылку на карту в Rewriter. –