Улучшить мой код с помощью слабой связи или высокой связи, если таковые имеются?

Я хочу улучшить свой код с помощью GRASP, создав еще более слабую связь с моим кодом. В моем примере я не уверен, делаю ли я вообще более низкую связь, и делаю ли я слабую связь вместо высокой связи?

Я делаю свой проект, используя Spring boot. В моем административном контроллере я работаю с двумя классами: RestaurantcardService и ContentsectionService (из моего сервисного уровня). Оба этих класса имеют реализованные интерфейсы с именами I_RestaurantcardService и I_ContentsectionService.

Код выглядит следующим образом:

public class AdminController {
RestaurantCardService restaurantcardService;
ContentsectionService contentsectionService;
public AdminController (){
    this.restaurantcardService       = new RestaurantCardService ();
    this.contentsectionService       = new ContentsectionService ();
}

Теперь мой вопрос:

Если я реализую интерфейсы для RestaurantCardService и ContentsectionService в качестве типов данных для атрибутов, а не самих классов, не нарушится ли связь, потому что мы могли бы реализовать интерфейс в другом варианте RestaurantCardService и ContentsectionService?

Тогда это будет выглядеть так:


person Gustav Vingtoft    schedule 20.06.2019    source источник
comment
О какой муфте вы говорите? Связь между пакетами или между классами в одном пакете? В общем, следует стремиться к сильной/высокой связи классов, которые находятся в одном пакете, и очень низкой связи между классами, которые не находятся в одном пакете. Дизайн структуры упаковки действительно важен для обслуживания.   -  person deHaar    schedule 20.06.2019
comment
Может быть, Stackexchange для разработки программного обеспечения лучше подходит для такого рода вопросов о принципах проектирования.   -  person tkruse    schedule 20.06.2019
comment
Я пытался улучшить форматирование, но кажется, что в конце кода отсутствует предложенная вами идея.   -  person Laurenz Albe    schedule 21.06.2019


Ответы (1)


Это высокосвязанный код. Вы жестко запрограммировали свои зависимости в самом классе. Это затруднит модульное тестирование класса.

Хороший подход должен заключаться в получении зависимостей через конструктор и должен иметь интерфейс для каждой службы.

eg: -

 public class AdminController {
            private final RestaurantCardService restaurantcardService;
            private final ContentsectionService contentsectionService;
            public AdminController (final RestaurantCardService rcs,final ContentsectionService  css){
                this.restaurantcardService       = rcs;
                this.contentsectionService       = css;
            }

 AdminController  ac = new AdminController (new RestaurantCardServiceImpl(),new ContentsectionServiceImpl());


            so for unit testing you can pass mock services;

            for intance:


    AdminController  ac = new AdminController (new MockRestaurantCardServiceImpl(), new MockContentsectionServiceImpl());

Наслаждайтесь кодированием!

person Prasobh.Kollattu    schedule 21.06.2019