Как происходит слабое и плотное сцепление в каркасе пружины?

Извините, ребята, я снова задаю этот вопрос. Это уже достаточно объяснено. Хотя я прочитал много статей и прочитал статью Рода Джонсона также. Не могу найти, где здесь происходит слабая и жесткая связь. Я пытался понять, как компоненты являются независимыми? Как они взаимодействуют? Вставил код контроллера, сервиса, дао, репо, модели. Пожалуйста, объясните мне.

контроллер:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController("/user")
public class UserController {

    @Autowired
    ServiceInterface service;

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public User save(@RequestBody User user) {
        return service.save(user);
    }

}

Сервисный интерфейс:

package com.example.demo;

public interface ServiceInterface {
    public User save(User user);
}

Обслуживание:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService implements ServiceInterface{

    @Autowired DaoInterface dao;

    public User save(User user) {
        return dao.save(user);
    }

}

Дао Интерфейс:

package com.example.demo;

    public interface DaoInterface {
        public User save(User user);
    }

Dao:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserDao implements DaoInterface{

    @Autowired UserRepo repo;
    public User save(User user) {
        return repo.save(user);
    }
}

Repo:

package com.example.demo;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepo extends MongoRepository<User, String>{

}

Модель:

package com.example.demo;

public class User {

    private String firstname;
    private String lastname;

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

}

1 ответ

Практика свободной связи приходит с кодированием интерфейса, а не с реализацией. Это означает, что должен быть интерфейс для UserService, UserDao и реализация как DefaultUserService, DefaultUserDao И в DefaultUserService должен использовать UserDao интерфейс и в UserController должен использовать UserService интерфейс.

Но есть некоторые аргументы против некоторых разработчиков, что мы должны писать интерфейс, только если есть две реализации одного и того же интерфейса. Например:

UserDao интерфейс и DatabaseUserDao реализация и FileUserDao реализация, где обе реализации реализуют UserDao,

Итак, как вы можете видеть из приведенного выше примера, если мы используем UserDao Интерфейс нашего кода будет свободно пара и может переключаться между DatabaseUserDao, FileUserDao реализации легко.

ОБНОВИТЬ

С вашим введением ServiceInterface сейчас, если вы используете

@Autowired
ServiceInterface service; 

в вашем UserController это означает, что контроллер и UserService слабо связаны через интерфейс.

Другие вопросы по тегам