小编Jon*_*onC的帖子

我应该使用DTO作为MVVM中的数据模型吗?

我目前正在研究使用MVVM的第一次真正的尝试,并且已经阅读了有关如何最好地实现它的各种文章.

我目前的想法是将我的数据模型有效地用作数据传输对象,使它们可序列化并使它们存在于客户端和服务器端.这似乎是一个合乎逻辑的步骤,因为两个对象类型实际上只是属性getter和setter的集合,而介于两者之间的另一层似乎完全矫枉过正.

显然,INotifyPropertyChanged在服务器端无法正常工作会出现问题,因为没有要与之通信的ViewModel,但只要我们小心从服务层中的数据模型构建正确的域模型对象而不处理服务器端的数据模型我认为不应该是一个大问题.

我在阅读中没有找到太多关于这种方法的信息,所以我想知道这是否是一个非常标准的事情,这是否只是假设是在多层环境中做MVVM的事实上的方式?如果我对事物有完全错误的想法,那么对其他方法的想法也会受到赞赏.

architecture wpf mvvm dto

11
推荐指数
2
解决办法
5337
查看次数

OO设计,开放/封闭原则问题

我一直在思考这个面向对象的设计问题已经有一段时间了,并且无法提出一个令人满意的解决方案,所以我想在这里向群众展示一些意见.

我有一个游戏类代表一个基于回合制的棋盘游戏,我们可以假设它与此问题的目的类似于垄断.在我的设计中,我有一个包含TakeTurn方法的Player类.

游戏遍历所有球员 S和调用TakeTurn方法做一切必要的事情来完成转弯.我希望能够拥有n个玩家,并能够将其中的任意数量设置为计算机玩家.所以,我的想法是拥有一个HumanPlayer类和一个ComputerPlayer类,这两个类都派生自Player.

游戏者只知道播放器,并简单的调用TakeTurn每个方法球员轮流.我的问题在于,ComputerPlayer对象可以完全自动化,即保持Monopoly示例,可以决定使用某种逻辑购买属性.现在,使用HumanPlayer对象,它需要从实际用户获得一个输入,以便能够购买一个属性,这似乎意味着一个不同的接口,并可能意味着他们不应该派生

如果没有让Game类明确知道各种Player类的实际实现,我就无法找到解决问题的好方法.我总是可以在Game类中假设只有人类和计算机玩家并且有效地关闭它以进行扩展,但它似乎不是好的OO编程.

对此有任何意见将不胜感激.

language-agnostic oop ooad open-closed-principle

7
推荐指数
1
解决办法
895
查看次数

WPF切换按钮,自定义模板不接受单击正确的区域

我是WPF领域的初学者,所以我相信这将是许多问题中的第一个!

我有一系列切换按钮,都有一个自定义模板,用于显示具有透明背景的图像,然后在用户切换按钮时突出显示.我想在内容周围添加填充,以便突出显示的区域可以扩展到内容周围.这是有效的,但用户仍然必须单击内部区域来激活按钮,这不是我想要的.

我假设它是因为我使用ContentPresenter绑定到按钮的填充的Margin属性,这被归类为内容之外,但不确定解决此问题的最佳方法.它取消选择按钮时确实有效.

下面是一些XAML,显示了应该能够直接复制并粘贴到XamlPad中的问题.

<Page.Resources>
    <Style x:Key="ValidationToggleButton" TargetType="ToggleButton">
    <Setter Property="Padding" Value="5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate >
                <Grid Name="MainGrid">
                    <Viewbox>
                        <ContentPresenter Margin="{TemplateBinding Padding}"
                              Content="{TemplateBinding Property=Button.Content}" />
                    </Viewbox>
                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="ToggleButton.IsChecked" Value="True">
                        <Setter TargetName="MainGrid" Property="Background" Value="#88FFFF55" />
                    </Trigger>
                </ControlTemplate.Triggers>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</Page.Resources> 
<Grid>
<GroupBox Grid.Column="0" Header="Validation" BorderBrush="#55BBE6" Margin="2" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ToggleButton Grid.Column="0" Style="{StaticResource ValidationToggleButton}">
            CLICK
        </ToggleButton>
    </Grid>
</GroupBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何纠正这个问题?

wpf xaml templates

7
推荐指数
1
解决办法
7768
查看次数