デバイスの位置を追跡し、いくつかの要因(ユーザーが割り当てを取得)に基づいて、位置追跡の設定(頻度など)を変更する必要があるアプリを作成しています。
これを設計する方法に問題があります。
_// I left out methods to start\stop tracking
interface ILocationTracker
{
event EventHandler LocationChanged(Position pos);
void UpdateTrackingSettings(TrackingSettings settings);
}
interface IUser
{
event EventHandler AssignmentAdded(Assignment a);
}
_
IUser
をILocationTracker
に結合したくないので、これを追加しました(フィールドを省略しているので、読みやすくなっています)。
_class UpdateLocationTrackingSettings
{
public UpdateLocationTrackingSettings(ILocationTracker tracker, IUser user)
{
}
// I need to somehow start/stop it listening to AssignmendAdded event
public void Start() {
// Subscribe to IUser:AssignmentAdded
}
public void Stop() {
// Unsubscribe from IUser:AssignmentAdded
}
void OnAssignmentAdded(Assignment a)
{
TrackingSettings settings = GetSettingsByAssignment(a);
_tracker.UpdateTrackingSettings(settings);
}
}
_
私が持っている質問:
UpdateLocationTrackingSettings
を「開始」する方法は? ILocationTracking
とUpdateLocationTrackingSettings
を含み、それぞれでStart()
を呼び出す位置追跡用のファサードが必要ですか?
GetSettingsByAssignment
のように感じます。戦略パターンを使用する必要があります。割り当てに基づいて追跡設定を計算して返すITrackingSettingProvider
のようなものを実装することを考えています。
これは考えすぎですか?
別のまたはより良いデザインの提案はありますか?
これは考えすぎですか?
[〜#〜] yes [〜#〜]。この選択をするのは時期尚早です。あなたが明確なアイデアを持っている場合は、それで行ってください。そうでない場合は、いくつかのテストを作成し、可能な限り単純なコードで合格させます。循環クラス依存関係が発生した場合は、インターフェースを導入してそれを破ります。コードが反復的または醜い場合、リファクタリングします。その時点で、いくつかのデザインパターンがニーズに合う場合があります。