基于以下内容,我正在尝试使用尽可能少的代码来创建CRUD:我有几个问题:
在 Controller
String model = "phone"
Class<?> abc = model+"Service"; ??
Class<?> def = model; ??
abc.read(def, 1);
??
Dao
public interface GenericDao<E, K> {
public E read(Class<E> type, K id);
}
@Repository
public class GenericDaoImpl<E, K extends Serializable> implements GenericDao<E, K> {
@Autowired
private SessionFactory sessionFactory;
@Override
public E read(Class<E> type, K id) {
return currentSession().get(type, id);
}
}
服务
public interface GenericService<E, K> {
public List<E> read(Class<E> type);
}
@Service
@Transactional
public class GenericServiceImpl<E, K> implements GenericService<E, K> {
@Autowired
private GenericDao<E, K> dao;
@Override
public E read(Class<E> type, K id) {
return dao.read(type, id);
}
}
控制器
@RestController
@RequestMapping("/{model}")
public class CrudController extends Controller {
@Autowired
protected GenericService<User, Integer> userService;
@Autowired
protected GenericService<Phone, Integer> phoneService;
@GetMapping("/{id}")
public ResponseEntity<Object> read(@PathVariable String model, @PathVariable Integer id) {
Object object = phoneService.read(Phone.class, id);
return ResponseEntity.ok(object);
}
}
答案 0 :(得分:0)
在我以前的工作之一中,我曾研究过Eclipse RCP
桌面应用程序。它是一个ERP,因此请考虑它必须处理的大量数据库表以及所有可能的参数化。
该架构完全是泛型,我的意思是每个 view 都基于某些元数据表示。虽然该方法乍看起来似乎不错,但它只是马马虎虎。强大的泛化意味着总体设计中的许多折衷,泛化意味着在调试时会发疯,因为一切都在这里进行!
泛化意味着在维护代码时会发疯。那么特定的用例呢?您需要以某种方式处理。
典型的Web应用程序没有那么大,它不能处理数百个表。因此,不要害怕重复相同的 Controller-Service-Repository 模式。这就是所谓的关注点分离,甚至是数据和行为的封装。
保持您的包裹井井有条,一切都会好起来的。