Как происходит слабое и плотное сцепление в каркасе пружины?
Извините, ребята, я снова задаю этот вопрос. Это уже достаточно объяснено. Хотя я прочитал много статей и прочитал статью Рода Джонсона также. Не могу найти, где здесь происходит слабая и жесткая связь. Я пытался понять, как компоненты являются независимыми? Как они взаимодействуют? Вставил код контроллера, сервиса, дао, репо, модели. Пожалуйста, объясните мне.
контроллер:
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
слабо связаны через интерфейс.