Cat*_*ICU 6 c# architecture wpf mvvm magic-string
我的WPF项目将按如下方式组织:
Screens
Group1
Screen1
View.xaml
ViewModel.cs
Group2
Screen2
View.xaml
ViewModel.cs
Run Code Online (Sandbox Code Playgroud)
要显示Screen1来自Screen2我将使用这样的东西:ScreenManager.Show("Group1.Screen1")这在Screens.Group1.Screen1View和ViewModel 的命名空间中查找(使用反射)并实例化它们.
我怎样才能消除魔法字符串,不耦合Screen1和Screen2(我不想班Screen2使用的Screen1命名空间).我也想要一些屏幕发现(自动完成/智能感知)
或者可能采用某种方式(自动化测试)来验证所有调用ScreenManager.Show是否有效.
更新: 我想出了这个:
public class ScreenNames
{
public Group1Screens Group1;
public class Group1Screens
{
public ScreenName Screen1;
}
}
public sealed class ScreenName
{
private ScreenName() { }
}
public class ScreenManager : IScreenManager
{
public void Show(Expression<Func<ScreenNames, ScreenName>> x) {}
}
Run Code Online (Sandbox Code Playgroud)
用法:
screenManager.Show(x=>x.Group1.Screen1);
Run Code Online (Sandbox Code Playgroud)
不理想,但我认为违反DRY仍然比魔术弦更好.我可以自动测试(通过反射)所有调用都是有效的.
最后我使用 T4 代码生成来生成我的ScreenNames类。我通过调整以下代码来做到这一点:AutogeneratestrongtypednavigationclassforallusercontrolsinASP.NETwebapplication
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |