私は、Microsoftテクノロジーをベースにした中小企業のデータベース開発者として新しい仕事を始めました。私は、ベストプラクティス、設計パターン、テスト、およびプロジェクト管理に関して、学校で教えられたものからどれだけのプラクティスが逸脱しているかに早く気づきました。
私を最も悩ませているのは、メインのデータベース開発者(以下、「ジョン」と呼びます)がデータベースにモデルスキーマを保持する方法です!これを行うには、3つの「マジック」テーブルを使用します。1つはデータベーススキーマ用、1つはテーブル用、もう1つは列用です。
レコードを「テーブル」テーブルに挿入すると、実際の対応するテーブルが(データベーストリガーを介して)生成されます。「Rows」テーブルに行を挿入すると、参照されているテーブルがその行で更新されます。これらは、彼の手作りのC#プログラムによって順番に読み取られ、C#モデルを生成します。これは、フロントエンド開発者がコントローラーおよび外部向けに使用します。
これとは別に、ほとんどの開発はASP.NET MVCフレームワークに従って行われます。
このアプローチにはいくつかの欠陥があります。
- ORMを維持するために彼が必要であり、そうする時間はめったにありません(ジョブのセキュリティは良いです!)
- 「テーブル」および「行」テーブルのトリガーに欠陥があります。テーブルの更新も、チェック制約や「高度な」機能もサポートしていません。それらを確実に改善することはできましたが、これが道筋かどうかはまだわかりません。
- データベース内のプログラムロジックを維持することは、奇妙で制限されているように感じます(ただし、C#を使用してモデルを拡張することは可能です)。
- 彼のC#モデルジェネレーターは、3人のうちの1人(私は1人)によって手動で実行する必要があり、まだ自動化されたビルドプロセスに含まれるほど成熟していません。
Entity Frameworkのような真のテスト済み製品への段階的導入を提案した人もいますが、彼はそれを却下し、ビジネスロジックをコード層に保持することは小規模なアプリケーションとスタートアップのブートストラッププロジェクトにのみ適していると主張しました。
この投稿は、意見を述べた議論のように見えるものに向かっていますが、それは私の意図ではありません。私たちのアーキテクチャのアプローチに関する明確化が必要です。
データベースにドメインモデルを保持することは、成長中の企業にとって持続可能なソリューションになりますか?