MCLS Notes

MainToolbar View

Button Click Event handle àMainToolbar.xaml.cs OnConnect() functionàService.Messenger.Send(new NewConnectionEventArgs())

MainToolbar Viewmodel

_messenger.Register<NewConnectionEventArgs>(this, OnOpenNewConnetionWindow)à OnOpenNewConnetionWindow àPopupWindowShowupàNewConnectControlàbtnConnect_Clickà

……

主要写四个部分如何实现(流程等)

1. 程序启动

Shell (GetView top,main status, LoadWindowIcon etc.)à

MCLSPlugin(Constructor, Register IoC objects new ViewModels; new UI components

MainViewModel(Constructor, new MainToolBarViewModel; ControlPanelViewModel(including ChannelViewModel); )à

MCLSUI(Constructor, new MainToolbar; MainUI(including FrontPanel); StatusBar)

2. 链接硬件,显示状态

MainToolbar(Click Connect Button)à

MainToolbarVM(OnOpenNewConnectionWindow, Refresh available COM ports, new an instance of NewConnectControl, wait for user input)à

NewConnectControl(Click Connect Button, Get user input port number then Send Message Call MainToolBar.xaml.cs OnConnect function )à

MainToolBar OnConnect(DeviceConnectingEventArgs e) (open device and start monitoring port, update data to ControlPanelViewModel, trigger Controlpanel set default value)

3. 通过软件更改设备的运行状态

Click on one channel (FrontPanel Binding ChannelClickCommand)à

ControlPanelViewModel(OnClickChannel, set property SelectChannelViewModel)à

ChannelViewModel(set IsSelected property, Binding with FrontPanel get/or set other properties,and update UI)

4. 多语言支持

------------------------------MCLS-----------------------------------------

Maintoolbar (Click Options Button)à

Maintoolbar VM (New Option Window, set some properties, Open)à

-----------------------------Share library---------------------------------

OptionWindow (Binding OptionModel View element, Create instance by ViewType[LocalizationOption, ManufacturerDefaultView])à

LocalizationOption(via LocalizationService to Query status or do some operation, SupportLanguages,CurrentLanguage Add handler to SelectionChanged event)à

LocalizationService(main class of process multi-language support, maintain a group of SupportLanguage Class, notify binding target current language has changed.)à

SupportLanguage(Control load/unload XML file, lookup keys in built-in dictionary feedback actual value)

====================================================================================

IMessenger 用于在程序的各个模块中发送命令进行通信。

ILocalizationService 用于Support多语言环境

Unity

控制反转(Inverse of control): 某一接口具体实现类的选择控制权(控制)从调用类中移除,转交给第三方决定(反转)。依赖对象的获取被反转了。目的是削减计算机程序的耦合问题。解除合作对象之间引用的耦合。

依赖注入(Dependency Injection):由容器来帮忙创建及注入依赖对象,对象只是被动的接受依赖对象。

由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

MVVM Light

Register<TMessage>(Object, Action<TMessage>)

Registers a recipient for a type of message TMessage. The action parameter will be executed when a corresponding message is sent.

Registering a recipient does not create a hard reference to it, so if this recipient is deleted, no memory leak is caused.

Shared Library

PoolingService 用于向设备轮询当前值或者Monitor其他对象等。

DataService 用于控制硬件开启、关闭,以及获取数据。

LocalizationService 用于多种语言的Support

WPF引入的一个新的概念,嵌套消息泵,就是在一个While(GetMessage(...))内部又启动了一个While(GetMessage(...))。

Dispacher

每调用一次Invoke和BeginInvoke,即向Dispatcher中加入了一个任务,并且发送消息通知Render(呈现)线程更新界面显示。

AR:

1. 研究PoolingService的作用?什么时候用?

2. Unity的ServiceLocator究竟起什么作用,如何使用?

3. MCLS在轮询data(轮询线程)如何避免与 SetValue(主线程)冲突?

4. XAML DataTemplate,relative binding代表什么含义,学习。

5. 使用串口通讯工具向MCLS发送、接收命令。

【DataService】

Initial:

生成SerialQueue存放task的集合 。

启动另一个线程按顺序执行SerialQueue中的每个Task,确保一次只有一个task被执行。

SetValue所起到的作用只是向SerialQueue中添加任务,交由其他线程执行后获取返回值。因此不会与其他的task产生冲突。

参考TryGetDeviceValue之流程:

1. New a delegate to call get device value API

2. Add new job into task queue.

3. Let queue process thread execute.

4. Wait and get result from last job.

【PoolingService】

1. 向宿主程序集当中不断发送GetDeviceValueArgs类型的消息(通过MVVM的Messenger传递)

2. 驱动ControlPanelViewModel的OnPooling,将当前的设备状态(选中那个channel、系统是否被enable、channel的实际value)同步到前台界面显示。

【ServiceLocator】

Service Locator模式想要解决的问题是解耦合服务提供者和用户,用户无需直接访问具体的服务提供者类。

服务定位器模式的优缺点

服务定位器模式在带来解耦和、可维护性、动态升级服务等好处的同时,也带来一些不好的方面,比如

1、由于用户无法确切知道服务提供者的真实情况,那么如果出现错误,难以定位

2、集中式、单例的注册机是并行计算、系统扩展的瓶颈

3、由于需要集成全局的服务注册代码,执行单元测试也会麻烦些

4、注册机隐藏了类的依赖关系,使得本来在编译期可以暴露的问题,在运行时才发生

MCLS程序中不需要给每个ViewModel传入container,然后再调用container的Resolve方法。例如:

_localService = container.Resolve<ILocalizationService>();

等价于

ServiceLocator.Current.GetInstance<ILocalizationService>();

【XAML Data Template】

时间: 2024-09-28 22:50:47

MCLS Notes的相关文章

84. 从视图索引说Notes数据库(下)

作用和代价上文介绍了关系型数据库里的索引.Notes数据库里的索引隐藏在视图概念里(本文的讨论只针对Notes的视图索引,不包含全文索引.).开发人员创建的视图仅仅是存放在数据库里的一条设计文档,数据库引擎会依据它创建和更新索引.关系型数据库里的索引是从记录中抽取的数据排序而组成的数据结构(主要是B树),Notes视图的索引还包括未排序的列.计算值.分类.总计等等数据(数据结构仍然是B树,如果运气足够好的话,你会遇到Notes报出B-tree structure is invalid的错误).用

Codeforces 538C. Tourist&#39;s Notes

A tourist hiked along the mountain range. The hike lasted for n days, during each day the tourist noted height above the sea level. On the i-th day height was equal to some integer hi. The tourist pick smooth enough route for his hike, meaning that t

Notes of Daily Scrum Meeting(11.5)

Notes of Daily Scrum Meeting(11.5) 今天是我们学习学长代码,同时学习安卓语言的第三天.我们和学长沟通了一下,仔细讨论后得出一个结论,学长在 IOS平台上的代码可以借鉴,但是很多地方是不能移植过去的,需要我们进行重写,最主要的原因还是IOS平台和Android 平台上的差异性,就比如说:在IOS平台上编写UI会非常简单,在Xcode上拉一个界面出来只需要写很简单的代码就能实现 一个很炫的效果,但是在Android平台上,所有的UI效果都需要自己去搭建实现,因此,我

BZOJ1531: [POI2005]Bank notes

1531: [POI2005]Bank notes Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 229  Solved: 119[Submit][Status] Description Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出面值k求最少要用多少个硬币. Input 第一行一个数 n, 1 <= n <

[notes] ImageNet Classification with Deep Convolutional Neual Network

Paper: ImageNet Classification with Deep Convolutional Neual Network Achievements: The model addressed by Alex etl. achieved top-1 and top-5 test error rate of 37.5% and 17.0% of classifying the 1.2 million high-resolution images in the ImageNet LSVR

NOTES : A Model of Gas Exchange for Hyperpolarized Xe(129) Magnetic Resonance of the Lung

NOTES :  A Model of Gas Exchange for Hyperpolarized Xe(129) Magnetic Resonance of the Lung  背景知识: Gas exchange is the essential function of the lung. In general, a lung can be viewed as a porous medium(多孔介质) consisting of capillary(毛细管) circuits with

Think in C++ notes, Ch2 &amp; 3, Objects &amp; Class

留待修改 私货:啊这个标题逼格好高 5.2 10:36 开始阅读 Think in C++ notes, Ch2 & 3, Objects & Class,布布扣,bubuko.com

Advice for Applying Machine Learning &amp; Machine Learning System Design----- Stanford Machine Learning(by Andrew NG)Course Notes

Adviceforapplyingmachinelearning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来我们要做的是高效地利用这些算法去解决实际问题,尽量不要把时间浪费在没有多大意义的尝试上,Advice for applying machine learning & Machinelearning system design 这两课介绍的就是在设计机器学习系统的时候,我们该怎么做? 假设我们实现了一个正则化的线性回

Priceless Notes

[Priceless Notes] 1.人类对价格的绝对值没有准确的判断,但是价格或物体的相对值有较准确的判断. 2.物理强度与主观体验的关联成幂曲线.如60瓦的灯会让人觉得亮,但要让人觉得2倍亮的话,则需要4倍的亮度.又如某种程序的糖让人觉得甜,但要想2倍甜的话只需要1.7倍的糖就够了.也就是相同的刺激比率可以得出相同的主观比率. 3.心理状态决定着经济决策. 4.100%的事情和99%的事情,在主观上有着巨大的差异.这种差异会表现在价格和选择上.与此同时,10%和11%的概率差异可以忽略不计