私は、共通の構造を共有し、同じことのいくつかを同じ方法で実行する必要があるいくつかの小さくて単純なアプリケーションを作成しています (例: ロギング、データベース接続のセットアップ、環境のセットアップ)。再利用可能なコンポーネント。コードは、強く静的に型付けされた言語 (Java や C# など、両方でこの問題を解決する必要がありました) で記述されています。現時点で私はこれを持っています:
abstract class EmptyApp //this is the reusable bit
{
//various useful fields: loggers, db connections
abstract function body()
function run()
{
//do setup
this.body()
//do cleanup
}
}
class theApp extends EmptyApp //this is a given app
{
function body()
{
//do stuff using some fields from EmptyApp
}
function main()
{
theApp app = new theApp()
app.run()
}
}
より良い方法はありますか?もしかして以下のような?トレードオフを比較検討するのに苦労しています...
abstract class EmptyApp
{
//various fields
}
class ReusableBits
{
static function doSetup(EmptyApp theApp)
static function doCleanup(EmptyApp theApp)
}
class theApp extends EmptyApp
{
function main()
{
ReusableBits.doSetup(this);
//do stuff using some fields from EmptyApp
ReusableBits.doCleanup(this);
}
}
明らかなトレードオフの 1 つは、オプション 2 では、「フレームワーク」がアプリを try-catch ブロックでラップできないことです...