Улучшение моего кода со слабой связью или высокой связью, если есть? - PullRequest
0 голосов
/ 20 июня 2019

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

Я делаю свой проект, используя Spring boot. В моем admincontroller я работаю с двумя классами: 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?

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

1 Ответ

0 голосов
/ 21 июня 2019

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

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

Например: -

 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());

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

...