2009-08-28 8 views
3

Dans mon application Web ASP.NET MVC, je:ASP.NET MVC (Modèle de domaine, dépôt, Fluent, Services - Structure pour mon projet)

  • Modèle de domaine, créé par LINQ to SQL

  • Référentiels tels que

    UserRepository et OrderRepository

  • IQueryable Fluents comme IQueryable Extension Des méthodes telles que

    public IQueryable<Order> GetNewOrders(this IQueryable<Order>)

  • services tels que

    UserService et OrderService

  • Classes utilitaires et méthodes d'extension telles que

    CryptoUtility (faisant Hashage etc.) et cordes, etc. extensions

  • ViewModels qui sont spéciaux pour chaque vue MVC

  • Le projet ASP.NET MVC lui-même (contrôleurs, vues)

Je cherche la meilleure structure de projet/organisation pour mon cas, en particulier séparer en différents assemblages et comment les dépendances devraient ressembler entre ces couches. Malheureusement, les ressources Web ne vont pas dans les détails. Un indice: Actuellement Repository, Services, IQueryable Fluents etc. fonctionnent directement sur l'implémentation du modèle de domaine, je n'ai pas de définition d'interface pour eux. Je l'ai jugé inutile, mais peut-être est-ce nécessaire pour un couplage lâche? Mes services ont une interface (par exemple IOrderService) et mes référentiels implémentent IRepository < T>. Appréciez votre contribution sur l'organisation concise, et surtout quelle couche devrait dépendre de ce que l'organisation de l'assemblée . Je vous remercie!

Répondre

0

Vous voudrez peut-être vérifier s#arp architecture pour voir comment ils structurent les choses. Il utilise NHibernate et leurs repos sont un peu directement liés à eux, vous devrez donc le modifier.

8

Je regardais l'article de Jeffrey Palermo o n l'architecture de l'oignon here.Cette architecture de base fonctionne bien dans n'importe quel projet et vous permettra de séparer votre projet principal (couche de domaine, persistance, etc.) de votre projet web. Nous l'utilisons avec MVC/StructureMap/FluentNHibernate et avons eu beaucoup de succès.

Nous finissons par avoir une structure similaire à celle ci-dessous.

> trunk 
    + build (build scripts) 
    + lib (external libraries) 
    > src (source code)  
    >> Organization.App (solution name) 
    >> Organization.App.Core (code library) 
     + Config 
     > Domain 
      > Model 
      > Persistence 
      > Queries 
      > Services 
     > Persistence 
     > Services 
    >> Organization.App.Web (mvc web app) 
     > Assets 
      + Images 
      + Scripts 
      + Stylesheets 
     + Controllers 
     + Views 
     + ViewModels 

C'est l'idée de base. L'application Web fait référence à l'application de base pour les entités de domaine, notre référentiel/unité de travail. Consultez this older project on google code pour un exemple similaire. La grande partie à ce sujet est que nous avons été en mesure d'ajouter de nouveaux types de projets «UI» à la même solution et de réutiliser notre projet de base comme prévu. Comme une application de console ou une deuxième application Web, ou tout ce dont vous avez besoin.

+0

Où mettez-vous des services? dans le projet Core? – Alex

+0

Vous pouvez. J'aime que le nombre de DLL que nous devons construire soit réduit au minimum. Mais vous pourriez le mettre dans un projet séparé. Je l'ai ajouté à l'arbre pour vous. Nous avons également la notion de services de domaine, donc ceux-ci iraient sous le dossier de domaine/espace de noms. Ce serait un service qui ne fonctionne qu'avec des entités de domaine. Le dossier de services que vous voyez sous le projet serait un service «d'application» en ce sens qu'il pourrait avoir des dépôts injectés ainsi que d'autres services d'application pour faire le travail. Ça dépend. :) –

+2

On dirait que fsu-isys-489-spring-09-group-2 a été retiré. Je ne peux pas trouver où ça va. En outre, quelle est la différence entre la persistance et les services sous domaine par rapport à la racine du projet de base? –

Questions connexes