2

私は、さまざまな病院(顧客)からのデータを消費し、データベースからの構成の読み取りに基づいて、特定のビジネスルールをそのデータに適用する病院統合システムを設計しています。Javaを使用している場合、私の最初の本能は、さまざまなビジネスルールを表す一連のインターフェイスを構築し、次に具体的なインスタンスを挿入して(Spring / guiceを使用して)完全に構成されたオブジェクトを構成することです。これにより、構成ロジック(Hospital Fooに適用する必要のあるビジネスルール)と実際のビジネスルール自体を明確に分離することができます。

残念ながら、私はJavaを使用しておらず、Luaを使用しています。私は過去数日間、Luaの文献に没頭してきましたが、DIに最も近い類似物はモジュールの使用であるように見えます。さらに、実行時にluaモジュールがどのように解決されるかを管理するルールは、ローカルファイルシステムへの問い合わせに完全に基づいているようです。

「モジュールパターン」は、私が求めているもの(構成ロジックとビジネスロジックの分離)を実現するための最良の/唯一の方法ですか?もしそうなら、Luaのモジュール読み込みルールをどのように活用して、実行時に読み込まれる実際のモジュールを変更できますか?

4

1 に答える 1

9

ステップ1:Javaプログラマーのように考えるのをやめます。

あなたは今ルアにいます。明示的でコンパイル時の固定プロトタイプを持つクラスはありません。関数はファーストクラスのオブジェクトです。それらは値です。したがって、問題をそのように分解します。

たくさんの「ルール」(つまり、関数)があります。これらのルールのいくつかを特定のデータに適用したいとします。「ロケーションXのデータにルールを適用するときは、このルールのセットを使用してください」という構成システムがあります。だから...そうしなさい。

データがロケーションXからのものであることを検出します。したがって、構成ロジックを呼び出して、そのデータに適用するルール(つまり、関数)を含むロケーションXのLuaテーブルを作成します。ロケーションXの構成ロジックは、ルールが格納されている場所からルールをロードし、それらを返します。構成がデータベースなどにある場合、ロケーションXのデータベースエントリはおそらく名前でルールを参照します。

そのルール名を実際のLua関数に変換する方法はあなた次第ですが、多くの方法があります。すべてのLuaファイルをディレクトリからテーブルにプリロードするレジストリを作成し、そのテーブルの名前に基づいてルールを選択することができます。または、名前付きのLuaファイル/スクリプトのデータベースがあり、それぞれが個別のルールになっている可能性があります。これを実装する方法はいくつもあります。

Luaでは、「依存性注入」は単に「関数のコレクションを構築する方法を決定する」ことです。LuaはJavaよりもはるかに自由形式の言語であるため、これは特別なことではありません。関数がどこから来たのか、それらをテーブルにまとめる方法、そしてそのテーブルをいくつかのデータに適用する方法の問題です。そして、それらはすべてあなた次第です。

于 2012-09-10T02:53:35.677 に答える