Pull to refresh

Comments 2

Спасибо. А про циклическую зависимость интересно. Постоянно с ней сталкиваюсь

Кто поделится Best Practice? Где в структуре проекта правильнее реализовать таблицы, отражающие связь "многие-ко-многим"?

Есть договора, ConractModule с ConractEntity. Есть продукты, ProductModule с ProductEntity.

И нужно сделать спецификацию в договоре, то есть перечень продуктов, включенных в договор. То есть ProductInContractEntity (поля contract_id, product_id. По id договора получаем список id продуктов в данном договоре).

Как правильнее сделать структуру проекта? С учетом того, что и в контроллере ConractModule , и в контроллере ProductModule , могут понадобится данные из ProductInContractEntity ?

Варианты:

  1. Делать внутри продуктов. То есть ProductInContractEntity описать внутри файла product.entity.ts, импортировать в ProductService, инжектировать второй репозиторий, и описать методы, работающие с репозиторием. Получается не очень красиво, дубликаты всех методов. Например, findAll будет для productRepository, и будет второй findAllForContract для productInContractRepository. Затем придется импортировать модуль ProductModule в ContractModule, и в контроллере в ContractController (/backend/contract/product), который выдает список продуктов в договоре, обращаться к этому productService.findAllForContract

  2. Делать с точностью наоборот, ProductInContractEntity описать внутри файла contract.entity.ts, и т.д. Опять дубликаты методов, и опять придется наоборот, импортировать ContractModule в ProductModule , потому что в контроллере продуктов ProductController может быть метод, читающий данные из ProductInContractEntity . Например дай список договоров, где встречается определенный продукт (/backend/product/contract).

  3. Делать отдельный модуль ProductInContractModule, или SpesificationModule назвать его, и в него импортировать ContractModule и ProductModule, и все запросы, где нужны смешанные данные, реализовать в этом модуле ProductInContractModule. Но во первых появляется третий контроллер (/backend/speca), это для фронта неудобно, или некрасиво. И второе, есть еще другие сущности в договоре, например перечень услуг в договоре. Или перечень задействованных в договоре ресурсов. И что же, кучу модулей теперь городить?

Sign up to leave a comment.