Alors que je développe un très cool (et très grand) n-tier application.collisions de noms entre les couches
Fondamentalement, j'ai les assemblées suivantes:
domaine
Domain.Contracts
services
Services.Contracts
Presentation.Admin
Presentation.Web
Presentation.Core (partagé entre Admin & Web)
Je peux implémenter Presentation.Core.Contracts
Mon principal problème avec lequel je me bats sont les collisions de noms entre les différentes couches. Ie.
Services.Contracts.AccountServicesRequest
Domain.Contracts.AccountServicesRequest
J'ai eu le même problème avec les noms de service (dans ce cas, je suis juste en utilisant des classes comme les services plutôt que WCF, etc.). À savoir:
Services.Contracts.IAccountService
Domain.Contracts.IAccountService
Je résolus en faisant cela maintenant tous les "gestionnaires de services" dans la couche de domaine IxxxServiceHandler qui me donne ceci:
Services.Contracts .IAccountService
Domain.Contracts.IAccountServiceHandler
Cependant, je n'ai pas été en mesure de résoudre ce problème avec les objets qui sont passés dans les deux sens entre les couches. Cela semble être saupoudré dans un tas d'endroits à travers ma solution (s). J'étais juste curieux de voir si quelqu'un a eu les mêmes problèmes. Si oui, comment les avez-vous résolus?
Haha! Oui, cela aide, mais peut-être pourriez-vous me donner un exemple. Disons (pour simplifier) J'ai 3 couches: (1) Domaine \ Domain.Contracts (2) Services \ Services.Contracts (3) Présentation Si j'ai un objet utilisateur dans le domaine et IUser et/ou UserDto que nommez-vous ces objets dans les autres couches? – devlife
Eh bien, j'aurais besoin de savoir exactement * quoi * vous nommez afin de déterminer le nom optimal pour cela. :-) Les choses telles que "Contrat", "Utilisateur", etc. ressemblent beaucoup aux concepts de domaine problématique, que je suggérerais de placer dans une seule couche de logique métier.Vous ne voulez pas répliquer ces classes ailleurs. Vous pourriez avoir des classes telles que Business.Contract et Business.User. (TBC) – CesarGon
Sur la couche de présentation, vous pourriez avoir, par exemple, Presentation.ContractDialog ou Presentation.UserWindow. Une "boîte de dialogue de contrat" est une boîte de dialogue qui affiche un contrat; vous n'avez pas Presentation.Contract parce que les contrats eux-mêmes sont modélisés * seulement * dans la couche de logique applicative. Est-ce que ça a du sens? – CesarGon