背景
我正在构建一个双层C#.net应用程序:
目前,我对Winforms客户端应用程序的整体架构有疑问.我是编程新手(大约一年),但我在这个应用程序方面取得了很大的进步.我想退后一步,重新评估我目前的做法,检查我是否正朝着正确的方向前进.
应用领域
Winforms应用程序是一个相当简单的安全人员跟踪应用程序.主视图(表单)是应用程序的焦点,并且具有将内容分组为功能区域的不同部分(例如,用于跟踪人员日程表的部分,用于跟踪分配到何处的人员的部分等).应用程序侧面的菜单启动辅助视图(例如历史记录,统计信息,联系人等).这个想法是安全办公室可以使用该应用程序来组织日常操作,然后保留数据库中所有内容的详细历史记录,以便将来进行报告.
技术细节
如上所述,Winforms客户端是使用MVP模式(被动视图)构建的,重点是尽可能多地使用依赖注入(通过SimpleInjector IoC容器).每个视图(表单)都与一个演示者配对.视图实现接口,允许演示者控制视图(无论具体实现如何).该视图会引发演示者订阅的事件.目前,不允许演示者直接与另一位演示者通信.
应用程序控制器用于协调应用程序.这是我的应用程序架构的领域,我是最不明智的(因此是帖子标题).应用程序控制器目前用于:
在应用程序启动时,IoC容器已注册到应用程序控制器中.例如,这允许应用程序控制器从容器创建演示者,然后由容器自动处理所有后续依赖项(视图,服务等).
题
为了使所有演示者都可以访问Application Controller,我将控制器创建为静态类.
public static class ApplicationController
{
private static Session _session;
private static INavigationWorkflow _workflow;
private static EventAggregator _aggregator;
#region Registrations
public static void RegisterSession(Session session) {}
public static void RegisterWorkflow(INavigationWorkflow workflow) {}
public static void RegisterAggregator(EventAggregator aggregator) {}
#endregion
#region Properties
public static Session Session
{
get { return _session; }
}
#endregion
#region Navigation
public static void NavigateToView(Constants.View view) …Run Code Online (Sandbox Code Playgroud)