Это будет зависеть от ваших обязанностей:)
Давайте начнем с другого места.Давайте начнем с вашей модели.
Я немного растерялся, когда вы говорите NODE
, но вы имеете в виду ROUTER
.Я знаю, что это действительно терминология, используемая в сети, но все же вы создаете модель.
Я знаю, что это кажется немного глупым, но подумайте об этом на секунду и сконцентрируйтесь на язык , который вы используете
- Какова ответственность
ROUTER
?
VS
- Чтоэто ответственность
NODE
?
Какова ответственность NODE
?Ну, NODE
- это общий термин, используемый для элемента, который является частью графа, дерева, сети или чего-либо еще.
Теперь ROUTER
- это совсем другое.ROUTER
действительно является NODE
в NETWORK
, и , а также направляет / отправляет пакетов другим ROUTERS
в сети.
Он также связывается (отправляя сообщения, это ключ) с другими узлами в сети для вычисления ROUTING TABLE
.Для вычисления ROUTING TABLE
, NODES
используйте PROTOCOL
( Состояние связи , Удаленный вектор и т. Д.)
Если вы делаете реалистичную модельсеть, вы должны принять во внимание эти вещи.
Теперь к NetworkStarter
.Вы запускаете сеть или вы подключаете / собираете сеть?Также, почему сеть начала содержать список узлов?Мне кажется, что это ответственность за подключение / сборку сети.
После этого ответственность за сборку ROUTING TABLE
лежит на узлах.
Теперь о концепцииROUTE
.
Что такое ROUTE
?Ну, это путь между двумя или более NODES
.Давайте добавим еще одну концепцию в: CONNECTION
(EDGE
на графике) между соседями в сети.
Давайте запишем все концепции до этого момента
Router
- Обязанности: отправка пакетов, создание таблицы маршрутизации RoutingTable
- используется Router
, Обязанности: хранение маршрутов (или путей) Connection
- подключение от одного маршрутизатора к другому ConnectionsTable
- используется Router
Обязанности: хранит соседей Path
- путь между двумя или более узлами Node
- a Router
Node
NetworkAssembler
- Обязанности: собрать сеть, подключить маршрутизаторы (узлы) Routing Protocol
- используется маршрутизаторами для связи и расчета RoutingTable
Теперь к SOLID:
Одиночная ответственность: это сложно!
Иногда компонент (может быть объектом) имеет более одной ответственности.Внутри он может состоять из других вещей или компонентов , которые могут иметь только одну ответственность.
Возьмите Router
в вашем случае.Что такое одиночная ответственность?В реальном мире все работает не так, как в программном обеспечении.Вы не можете просто взять на себя ответственность сети за создание таблиц маршрутизации в реальном мире.Сеть не существует как физическая вещь, подобная маршрутизатору, она состоит из , состоящих из компонентов.
Мы уже анализируем обязанности и назначаем их различным понятиям.
Открыто-Закрыто:
Что означает расширение нашей системы?
Добавить узлы режима?Да, это может быть сделано, и в этом вся идея создания сетей:)
Изменить протокол?Добавить возможность к маршрутизаторам расширяться (и настраивать, какой протокол использовать) с помощью нового protocols
: подсказка использовать STRATEGY PATTERN для реализации
Переупорядочить сеть?Вы делаете NetworkAssembler
расширяемым (с помощью STRATEGY PATTERN или чего-то еще).В реальном мире вы отправляете системных администраторов на курсы, чтобы узнать больше.Это похоже на внедрение нового шаблона стратегии:)
Принцип подстановки Лискова: если вы используете шаблон стратегии, убедитесь, что вы не пропускаете абстракцию слишком много
Разделение интерфейсов: используйте небольшие интерфейсы для своих концепций (Router
, RoutingProtocol
и т. Д.)
Инверсия зависимостей: используйте интерфейсы и делайте их маленькими:)
Я не буду приводить примеры кода, так как люди учатся программировать, программируя, так как это ваше задание :) Используйте вещи из этого ответа, чтобы получить ваши концепции, захватить их в коде и сделать хорошую реализацию.
Удачи и веселья Кодирование:)