2009-12-09 9 views
0

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?

Répondre

0

Oui, j'ai rencontré ce problème, mais je l'ai réparé assez tôt à chaque fois. Une bonne convention de dénomination de classe peut aider. Évitez d'utiliser le même nom dans les classes sur plusieurs couches.

Alternativement, vous pouvez utiliser namespace aliases, de sorte que vous seriez en utilisant, par exemple:

services::IAccountService 
domain::IAccountService 

cette aide?

+0

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

+0

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

+0

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

Questions connexes