小编Nei*_*l M的帖子

MVP,Winforms - EventHandlers或Delegates

我已经在一些使用被动视图的WinForms应用程序中实现了MVP模式.我实现了一个包含Action <T>和Func <T>形式的属性和委托的接口,以在具体视图中连接UI事件并回调给演示者.

我即将开始一个新项目并对在线模式进行了一些研究,包括这里的模式的许多示例,并注意到所有使用EventHandler来通知演示者.

我真的不明白为什么会在这种情况下使用事件,因为我看到一个视图只有一个演示者.

我的问题是,这是为了与.Net框架如何使用事件保持一致,还是出于其他原因我没有看到?

这是我使用的模式的一个简单示例:

public interface IViewAbstraction
{
    public ModelData ModelData { set; }
    public Action<ModelData> ModelDataChangedCallback { set; }
}

public class SomeWinForm : Form, IViewAbstraction
{
    private Action<ModelData> modelDataChanged;
    private ModelData model;

    public ModelData ModelData
    {
        set { /* when this property changes, update UI */ }
    }

    public Action<ModelData> ModelDataChangedCallback
    {
        set { modelDataChanged = value; }
    }

    private void OnSomeWinformsEvent(EventArgs args)
    {
        if (modelDataChanged == null) throw new Exception();

        modelDataChanged(model);
    }
}

public …
Run Code Online (Sandbox Code Playgroud)

c# mvp winforms

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

域建模 - 实现属性或POCO的接口?

我正在构建一个工具,它将通过SOAP api将文件导入基于Web的应用程序,并模拟了我想通过C#接口导入的内容,这样我就可以将Web应用程序的模型数据包装在我可以处理的内容中.

public interface IBankAccount
{
    string AccountNumber { get; set; }
    ICurrency Currency { get; set; }
    IEntity Entity { get; set; }
    BankAccountType Type { get; set; }
}

internal class BankAccount
{
    private readonly SomeExternalImplementation bankAccount;

    BankAccount(SomeExternalImplementation bankAccount)
    {
        this.bankAccount = bankAccount;
    }

    // Property implementations
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个存储库,它返回IBankAccount或其他的集合以及工厂类,以便在需要时为我创建BankAccounts.

我的问题是,这种方法会给我带来很大的痛苦,创建POCO会更好吗?我想将所有这些放在一个单独的程序集中,并完全分离数据访问和业务逻辑,这只是因为我在这里处理一个关于数据在线存储位置的移动目标.

c# design-patterns repository

6
推荐指数
1
解决办法
4029
查看次数

使用CMake自定义MacOS Bundle的Info.plist文件

我正在使用CMake为跨平台游戏生成构建文件,并希望在某些bundle的Info.plist文件中指定自定义NSMainNibFileNSPrincipalClass

这是我的Info.plist.in模板的相关部分:

<key>NSMainNibFile</key>
<string>${MAIN_NIBFILE}</string>
<key>NSPrincipalClass</key>
<string>${PRINCIPAL_CLASS}</string>
Run Code Online (Sandbox Code Playgroud)

我在CMakeLists.txt中所做的是:

set_target_properties(GLWindow PROPERTIES
  MACOSX_BUNDLE_BUNDLE_NAME "OpenGL Test"
  MAIN_NIBFILE "MainMenu"
  PRINCIPAL_CLASS "NSApplication")
  MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/CMake/Info.plist.in)`
Run Code Online (Sandbox Code Playgroud)

如果我获取MAIN_NIBFILE目标的属性,它会按预期返回MainMenu,但实际生成的Info.plist为空.

但...

如果我全局设置这些变量,它可以正常工作.

# I would prefer to set these at target scope, 
# but it doesn't bloody work!
set(MAIN_NIBFILE "MainMenu")
set(PRINCIPAL_CLASS "NSApplication")
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了什么,或者这是CMake的限制或它如何处理macOS包?

macos cmake nsbundle

4
推荐指数
1
解决办法
2479
查看次数

标签 统计

c# ×2

cmake ×1

design-patterns ×1

macos ×1

mvp ×1

nsbundle ×1

repository ×1

winforms ×1