Frage

Wir sind für einen Kunden ein Abrechnungs Generation System zu entwerfen.

Die Organisation, die wir hat eine Hierarchie sind Targeting wie folgt: Unternehmen -> Cluster -> Business Unit (BU) -> Abteilung -> Mitarbeiter

Das Gehalt für einen Mitarbeiter besteht aus verschiedenen Gehaltskomponenten. Jede Gehaltskomponente besteht aus 3-Regeln zugeordnet ist es, eine Rechenregel (Komponente als% der anderen Komponente Berechnen oder% einer festen Anzahl oder eine feste Anzahl), eine Fähigkeitsregel (ob ein Mitarbeiter / Dept für eine Komponente berechtigt ist), und eine Constraint-Regel, die tha max und min einer Komponente beschränkt.

**** Diese Regeln sind editierbar und können ** von einem Benutzer Endbenutzer bearbeitet werden. Auch diese Regeln Top-down geerbt, aber wenn auf einer niedrigeren Ebene definiert, die untere Ebene der Regel Vorrang. **

Wir haben eine Datenbank, die Anwesenheits hat, Blätter, Boni Tabellen und diese Regeln sind auch mit diesen Tabellen zu interagieren soll.

Der Client Abrechnung für mehrere Clients werden Erzeugen von denen jeder eine eigene Datenbank-Instanz hostet. Sie können jeweils eine unterschiedliche Auslegung der einzelnen Komponenten und kann verschiedene Komponenten aufweisen.

Wir suchen nur SQL Server zu unterstützen und Abrechnungs Generation wird eine Offline-Aktivität sein.

Wir sind aufgeteilt auf, wo die Logik setzen, die diese Regeln verwendet, um die einzelnen Steuerkomponenten zu erzeugen (die Steuerabzüge, Steuer Abschreibungen, Wertberichtigungen enthalten wird, usw.).

Einige Leute befürworten Magie SPs, die einen Mitarbeiter Id nehmen und eine Abrechnung für diesen Monat generieren. Andere wollen die Logik in separate Komponenten aufgeteilt werden, die die abhängigen Daten für einen Mitarbeiter in der Anwendungsschicht erhalten werden und diese Komponenten dort berechnen.

Die Reihenfolge der Prioritäten sind: 1. Die Möglichkeit, Änderungen an neue Kunden anzupassen schnell 2. Langzeit Wartbarkeit 3. Leistung

1 und 2 überwiegen 3 hier um einen großen Faktor, da dies eine Offline-Aktivität sein.

Wartbarkeit und schnelle Anpassbarkeit sehr wichtig sind, werden wir die Anwendung für verschiedene Kunden werden bereitstellen. Client A kann eine Gehaltskomponente Regel hat als ((0,3 * Basic) + 800) und Client B als (0,2 * Basic) + (0,1 * Atendance Bonus)

Wird SPs ein Chaos hier verursachen, da die oben vorgeschlagenen Regeln werden durch die Endbenutzer angegeben werden und werden individuell über einen Web-UI sein müssen. Wir werden die Formeln von SQL analysieren müssen. Wie schwer oder leicht wird es sein? Welcher Vorteil wird dies zu tun in der Anwendungsschicht (C # .Net) hat über SPs mit?

Die ursprüngliche Post ist hier: Konstruktionshinweise, Payroll System ... umbuchen ... aber keine der Fragen richtig beantwortet wurde.

Vorschläge und Hinweise auf bestehende Systeme Architektur wird sehr hilfreich sein. ... und ja, wir LINQ verwenden andere Stelle im System SQL.

Mit freundlichen Grüßen, Ashish Sharma

War es hilfreich?

Lösung

Ich versuche immer zu scheuen Geschäftslogik in der DB-Schicht setzen. Es ist schwieriger zu schreiben, debuggen und warten. Darüber hinaus ist die DB im Allgemeinen die teuerste Schicht zu skalieren. Wenn Sie am Ende brauchen Ihr System, Rindfleisch, um mehr Nutzer zu unterstützen es relativ billig und einfach, neue Web-Servern zu einem System hinzuzufügen, aber das Hinzufügen DB-Instanzen wird teuer, da jede DB eine Lizenz und zusätzliche Unterstützung erforderlich ist.

Andere Tipps

Wenn Sie die Formeln, wie zum Beispiel in JEP speichern (für Java) ist es ein Problem, nicht viel. Halten Sie einfach die vollständige Formel als Zeichenfolge: das heißt:. „pay = ((0,3 * Basic) + 800) und dann analysieren, sie in einen Baum

Sie können einige jep Dokumentation für Informationen sehen, und nehmen Sie die Ideen von dort. Sollte nicht 2 problematisch sein, einfach Lösern zu implementieren für die Formeln, die Sie hier gepostet haben.

Meine sugestion:

  • Halten Sie es in einer Zeichenfolge, die in der Datenbank
  • Erstellen Sie eine kleine Bibliothek für die eval und Parser.
  • es in einem binären Baum Parse. (Wie ‚+‘ zeigt auf 800 und weist auch auf ‚‘), dann die ‚‘ verweist auf ‚Basis‘ und ‚0,3‘
  • Nachdem Sie nur eine einfache rekursive Funktion benötigen, es zu lösen.

Wenn die Komplexität dieser Formeln sind nicht viel Sie diese in jeder Seite tun können, die Sie wollen, wie es Sie nicht nehmen so viel Zeit, es zu verarbeiten.

Wenn Sie eine .NET-Lösung suchen, die Formel in Strings dargestellt auswertet, hier ist ein ausgezeichneter Artikel, der mit ANTLR und C # eine Berechnungs-Engine zu erstellen. Es ist ein voll funktionsfähiges Formel-Interpreter, die Strings analysiert, baut ein AST, dann den Ausdruck auswertet. Darüber hinaus wird die Berechnungs-Engine implementiert, um die Besucher-Muster verwenden, wenn Sie also Funktionen, die Sie als Datenbankabfragen, um beispiels möchten, können Sie leicht die Anpassung in Ihre Lösung integrieren.

Haben Sie schon von Reflexion oder Delegierten gehören?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top