基础UI框架设计

我主沉浮中，有一个含权量公式的概念，着实是新奇，仅凭此一着，此剧便可长盛不衰。

在设计UI框架时，可以借鉴此的概念，将代码划分为“块块上的代码”和“条条上的代码”。这种划分方法能够使框架的结构更加清晰，功能更加明确。

### 块块上的代码

这些代码模块通常是应用程序的各个独立部分，负责具体的功能和用户界面部分。它们可以通过依赖注入来实现，即谁使用，谁创建，谁提供，谁实现。

块块上的代码：菜单、启动加载、侧边栏、任务栏、视图区，工具栏，状态栏，插件系统，用户管理，工程管理，设置面板，数据视图，报表生成，更新，通知系统，性能监控



### 条条上的代码

这些代码模块通常是应用程序的全局功能，提供支持和增强应用程序的整体功能。它们往往是一个模块，并通过对外的接口来供各个部分调用。

条条上的代码： 主题，语言，热键，日志，用户权限，网络通信，异常与错误，数据持久化，图形编辑器，用户提示，消息窗口，MsSQL,MQTT, 某个单独的单例功能，定时任务，下载模块。



有些部分会是双重管辖，即使条条上的，也是块块上的。

一些条条上的代码，是被封装在库里的，比如 log4net ，里面包含完整的日志框架结构，我们可以是现在菜单栏中，也可以实现在设置面板中，如果需要持久化，我们要把配置参数持久化写入到文件中。

主题模块也是，nuget上许多的UI库都自己实现过，如果我们直接使用UI库，自己只需要在对映的模块实现管理即可，但如果我们要调度多个UI库，那么我们自己实现一套管理UI样式的模块，并且将调用的库的细节隐藏住。

语言模块是C# 有原生提供的，但是情况一样，如果用，块块上的逻辑需要自己实现。但同样的，我们也可以用实现主题模块的逻辑，改成软件在运行中可更新。

热键模块，我找了几个nuget上实现的dll，感觉实现出的效果都不够好，自己实现的话，Widnows API是提供了全局的逻辑，窗口的逻辑可以自己捕捉键盘事件实现。 实现的最好的，其实是VSCode这个级别的编译器，每一个功能不仅仅是动态添加，还是动态配置，还可以修改，还有多种系统情况下的预设。



一些块块上的代码，比如任务栏，这个地方可以显示某些控件的状态，但同样的，也有可能有需要持久化的配置选项，比如某些显示，某些不显示之类的。



又比如说插件模块，在基类提供之后，通过反射和管理对映的dll  。 逻辑又能和更新的逻辑复用。

比如项目自定义的模块，。



当然也并不绝对， 条条上的代码，对内实现也可以是块块的。 比如多套UI的实现，封装成UI库之后，放在插件中，依赖加载，又比如语言包的实现。



微信的小程序其实属于典型的块块上的代码，他只是创建和调用，并不负责实现，实现由每个开发者自己负责。

这也是为什么大家都想要作生态。不仅要你贡献，还要吃你一口。但话回来，推广生态花的钱，不是个体可以承担的。这也是说初期，技术大于一切，中期推广，后期运营。