私が何度か遭遇したことの 1 つは、ヘルパーの内部クラスが原因で過度に大きくなったサービス クラス (JBoss サービスなど) です。クラスを分割する良い方法をまだ見つけていません。これらのヘルパーは通常スレッドです。次に例を示します。
/** Asset service keeps track of the metadata about assets that live on other
* systems. Complications include the fact the assets have a lifecycle and their
* physical representation lives on other systems that have to be polled to find
* out if the Asset is still there. */
public class AssetService
{
//...various private variables
//...various methods
public AssetService()
{
Job pollerJob = jobService.schedule( new AssetPoller() );
Job lifeCycleJob = jobService.schedule( AssetLifecycleMonitor() );
}
class AssetPoller
{
public void run()
{
// contact remote systems and update this service's private variables that
// track the assets.
}
}
class AssetLifecycleMonitor
{
public void run()
{
// look for assets that have meet criteria for a lifecycle shift
// and update this service's private variables as relevant.
}
}
}
したがって、いくつかのヘルパーがあり、それらがまったく複雑な場合、クラス ファイル全体が非常に大きくなる可能性があります。クラスがサービスによって完全に所有されており、そのサービスを支援するためだけに存在することを明確にするという点で、私は内部クラスが好きです。クラスを分割して、親サービスを参照として渡すことを試みましたが、これはほとんど機能しますが、気に入らない点は次のとおりです。
要するに、クラスを分割すると、私が好むカプセル化の一部が失われます。ただし、それらをそのままにしておくと、いくつかの大きな Java ファイルが作成される可能性があります。私はまだこれに対処する良い方法を見つけていません。C++ には「友達」という概念がありましたが、私はこれを見逃したことはめったにありませんが、この場合は実際に役に立ちます。
考え?