Здравствуйте, AlexGin, Вы писали:
AG>Здесь и у Вас, и у меня — две сушности.
ну никто не мешает сделать одну:
class node
{
std::vector<std::shared_ptr<node>> childs;
};
AG>Но у меня — универсальный узел и интерфейс к нему.
Нет, у тебя узел и иузел.
AG>Именно наличие программного интерфейса — позволяет уменьшить связанность (coupling) в проекте.
А конкретно в данном случае что именно уменьшается?
AG>За счёт этого, получим упрощение архитектуры и уменьшение количества ошибок.
Введение новой сущности интерфейса не упрощает, а усложняет.
AG>Конечно же, можно было обойтись и без интерфейса, однако так красивее и понятнее.
Эмоции. "Я так всегда делал и мне нравится"
AG>Кроме того, имеется заложенная база — как для развития (новые типы узлов),
yagni. Вот _если_ появятся новые узлы — вот тогда и добавим интерфейс. Впрочем, тут тоже могу условно согласиться. Если средство разработки не умеет в рефакторинг "выделить интерфейс", то приходится прыгать... впрочем и без авто-тулзов ввести интерфейс _при необходимости_ относительно просто. Проще, чем постоянно копаться в сотнях интерфейсов, созданных на всякий случай.
AG>так и для тестирования основы нашего проекта.
Вот тут могу согласиться для некоторых ЯП. Если ЯП не позволяет тестировать без интерфейсов, то их приходится вводить на каждый чих.