2017-02-09 3 views
0

Wir arbeiten an einer Reihe von Anwendungen in unserer Firma. Jede Anwendung hat eine unterschiedliche Geschäftslogik, teilt jedoch einige Strukturen. Zum Beispiel ist eine Anwendung für "IT-Dienste" und eine andere für "Paketbehandlungssystem" zwischen verschiedenen Gebäuden des Unternehmens. Wir möchten jede Anwendung mit separaten asp.net mvc-Projekten erstellen (Entity Framework Code-First). Das Problem ist jedoch, dass alle Anwendungen ähnliche Entitäten haben. Zum Beispiel haben alle von ihnen People, Buildings und Floors Entities in ihrem dbContext. und haben auch einige andere Tabellen, die Beziehungen zu diesen ähnlichen Tabellen haben Was ist der beste Ansatz zum Entwerfen dieser Anwendungen?Beste Vorgehensweise für gemeinsame Entitäten (Tabellen) zwischen mehreren Anwendungen

  1. Erstellen Sie eine einzige Datenbank für alle Anwendungen? Was sind Nebenwirkungen?
  2. Erstellen Sie separate Datenbank für jede Anwendung und duplizieren Sie die ähnlichen Tabellen? (Derzeit arbeiten wir daran, aber wir sollten einige SQL-Server-Jobs schreiben, um diese Tabellen immer zu synchronisieren. Daher denke ich nicht, dass es ein guter Ansatz ist)
  3. Erstellen Sie eine Datenbank für gemeinsame Tabellen und andere Datenbanken für jede Anwendung. Dies wird dazu führen, Beziehungen zwischen Tabellen zu verlieren und produziert auch Multi-Kontext-Anwendungen (Ich bevorzuge dies, aber ich lese, dass mit Code-First EF und Linq, ist es nicht möglich quer über mehrere Kontexte Query)
  4. oder etwas anderes?
+0

Was Sie tun, ist jemand anderes zu bitten, die harte Arbeit für Sie zu tun. Was hast du schon probiert? Kannst du die Antworten auf deine eigenen Fragen geben? auch wenn der Code teilt Entitäten, könnten Sie einfach ein separates Projekt, kompilieren Sie es zu einem.DLL und teilen Sie es zwischen den Projekten. – Stralos

+1

Sind die 'People',' Buildings' und 'Floors' eigentlich dieselben Daten? Könnte eine Zeile in "ITServices.People" sich auf dieselbe Person wie in "PackageHandling.People" beziehen? Wenn ja, sehe ich nicht, wie # 2 ein vernünftiger Ansatz ist. Auch Ihre # 3-Lösung könnte eine referenzielle Integrität aufweisen und würde nicht mehrere Kontexte erfordern, wenn Ihr Datenbanksystem Synonyme unterstützt. Es wäre in diesem Fall funktionell sehr ähnlich zu # 1. Und Sie müssen einen ordnungsgemäßen Sperrmechanismus für die gemeinsamen Tabellen ausarbeiten. –

+0

danke @ setphen.vakil. Ich arbeite an Synonyma Idee – iamnapo

Antwort

0

Ich bin sehr interessant für Db-Management-System. Ich mag deine 3 aproach zuerst. Alle von ihnen verschiedene Vor- und Nachteile. Wenn Sie riesige Daten auf dieser Datenbank haben, können Sie separate Datenbank wie Lösung wie 2 verwenden. Aber Sie müssen Synchronisationsmechanismus entwickeln, den Sie sagten. Wenn wir einen weiteren Vorteil der separaten Datenbank betrachten, dass, wenn eine Datenbank fehlerhaft oder defekt ist, eine andere Datenbank arbeiten kann, aber einige der Unternehmensdaten können nicht verfügbar sein, bis der Fehler behoben ist. Dies kann für große Systeme gut sein.

Lastyly "Erstellen Sie eine Datenbank für gemeinsam genutzte Tabellen und weitere Datenbanken für jede Anwendung", diese Idee so gut ist :)

Sie Mai N-Tier artitecture mindestens 3-Tier (Business-Presentation-Daten verwenden) und

Busines ==> Ihre Worker Funktionen

Data Layer ==> Viele Db Kontext

Präsentation ==> MVC-Projekt

Ich denke, die Lösung 3 und Lose Kupplung Verbindung mit N-Tier Artch ist der beste Weg.

Zuletzt können Sie suchen; Arbeitseinheit, Ninject Freamwork, N-Tier-Themen

Hinweis: alwasy der Code-first :) Ich mag-Code Erste Stil viel: D

Haben Sie einen schönen Tag :)

Wenn Sie will ich ein paar N-Tier-Struktur zeigen Lesson Link um "CodeProject.com" und Stackoverflow

Verwandte Themen