小编U. *_*lle的帖子

在WPF应用程序中使用MVVM和DDD而不需要太多类

我有一个WPF应用程序,我想为表示层应用MVVM,为整个应用程序应用DDD.我对如何应用架构非常困惑.你可以给我一些建议,因为我觉得我现在完全搞砸了以下设计尝试:

我有4层:

  • Presentation Layer :这是我的WPF客户端应用程序所在的位置.

  • Application Layer:这是我的服务,我们应该与业务规则的域服务进行通信,并进行CRUD.它只是作为层Presentation和层之间的反腐败层Domain.

  • Domain Layer :这是我有我的聚合,域对象和一些显示业务规则的服务的地方,例如 IsTooOld(Person person)

  • Infrastructure Layer:这是最低层,基础设施就在这里IRepository,IEntity等等.

让我们用这些基于DDD的层实现一个简单的场景:在数据库中有一个Person对象,映射它,CRUD数据库,检查人的生日并将其显示给用户.


表达层

我将从WPF部分开始.我创建了以下类:

  • PersonView :XAML视图的人

  • PersonViewModel:ViewModel提供功能PersonView.PersonView绑定到这个,这ViewModel提供了来自的价值PersonModel

  • PersonModel:这是我PersonViewModel紧密耦合的MVVM模型.


域层

这对于表示层来说已经足够了.我现在想连接到数据库以检索人物对象以呈现它.

我必须创造:

  • PersonEntityin Domain Layer:数据库实体的聚合,用于与数据库的映射.它位于Domain层中.

  • Personin Domain Layer:这是DDD的域模型.我会在这里提出一些逻辑,我不想像DDD建议的那样发送实体对象.


应用层

好的,我已经有3个人模特彼此非常相似.如何进行数据访问和服务呢?

  • PersonServicein Application Layer:当我的表示层想要与该层通信时,它需要将其PersonModel(MVVM模型)转换为Person(域模型).然后,应用程序层中的此服务将Person(域模型)转换为PersonEntity(实体对象)并对数据库执行CRUD.此服务还使用PersonService域层中的另一个(见下文)来检查/应用某些业务规则.

  • PersonServicein Domain Layer …

architecture wpf design-patterns domain-driven-design mvvm

17
推荐指数
1
解决办法
4253
查看次数

在统一的内联初始化中使用不可复制的值初始化static std :: map

我想初始化一个std::map值不可复制的静态.我将调用我的类ValueClass.ValueClass有一个std::unique_ptr私有成员,我甚至通过扩展non_copyable看起来如下所示确保ValueClass不可复制:

class non_copyable {
public:
    non_copyable() = default;
protected:
    virtual ~non_copyable() = default;
private:
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用我的类作为值来定义std :: map:

static std::map<int, ValueClass> value_classes = {
    {0, ValueClass()},
    {1, ValueClass() }
};
Run Code Online (Sandbox Code Playgroud)

initializer_list尝试复制此类时出现编译错误.

make_map本周末我试图在整个周末编写自己的函数来启用初始化而不复制但是我失败了.我试过这个,其他,但他们没有与Visual Studio编译15.9.4.

如何使用Visual Studio编译器初始化静态std :: map,其中copy不是强制的,并且初始化在一个函数中是统一的?

编辑: 这是现实生活场景的简化版本,我正在尝试使其工作(原谅我缺乏命名约定和案例的不一致):

#include <iostream>
#include <map>

class non_copyable {
public:
    non_copyable() = default;
protected:
    virtual ~non_copyable() …
Run Code Online (Sandbox Code Playgroud)

c++ noncopyable static-initialization c++17

8
推荐指数
2
解决办法
259
查看次数

如何对咸菜对象使用requirements.txt或类似内容

问题

我如何转储带有其自身依赖项的pickle对象?

泡菜对象通常是从笔记本生成的。

我尝试virtualenv为笔记本创建跟踪依赖关系的方法,但是这样我不仅获得了pickle对象的导入,而且还获得了应用程序其他位置使用的更多对象,这虽然足够好,但不是最佳解决方案。

背景

我正在努力实现的目标

我正在尝试建立MLOps流。快速说明:MLOps是一个流行语,它是用于机器学习的DevOps的同义词。不同公司提供了不同的PaaS / SaaS解决方案,它们通常解决以下问题:

  • 通过模型自动创建Web API
  • 处理要求/依赖性
  • 用于生成模型,二进制模型和数据集的存储和运行脚本。

我将跳过存储部分,重点介绍前两个部分。

我如何努力实现

就我而言,我试图使用良好的旧TeamCity建立此流程,其中模型是sk-learn生成的咸菜对象。要求是:

  • 依赖关系必须明确定义
  • 必须支持其他泡菜对象(而不是sk-learn)。
  • 数据科学家的工作流程将如下所示:
    • 数据科学家用上载了pickle模型requirements.txt
    • 数据科学家提交一个定义文件,如下所示:
     apiPort: 8080
     apiName: name-tagger
     model: model-repository.internal/model.pickle
     requirements: model-repository.internal/model.requirements
     predicterVersion: 1.0
    
    Run Code Online (Sandbox Code Playgroud)
    • 其中预测器是具有自己的FLASK应用程序requirements.txt。它是pickle模型的API包装器/层,将模型加载到内存中并提供来自其余端点的预测。

然后,TeamCity中的构建配置将解析该文件并执行以下操作:

  1. 解析定义文件。
  2. 查找预测代码
  3. 将pickle模型复制为预测器应用程序根文件夹中的model.pickle
  4. requirements.txt将预测器与requirements.txt泡菜模型合并
  5. 创建virtualenv,安装依赖项,将其推入

作为流的输出,我有一个包含REST API的程序包,该API使用了pickle模型并暴露给定义的端口。

python dependencies pickle devops data-science

5
推荐指数
1
解决办法
177
查看次数

注册用法跟踪x86

我有一个应用程序的汇编指令列表,我想知道哪些寄存器可以免费使用,以及在列表的任何索引处使用了哪些寄存器.

如何知道寄存器何时被使用以及何时被释放(可以再次使用)?我的目标是到达真正免费的寄存器.

这是我解决问题的假设,因为我对装配知识如此有限,所以听起来可能很愚蠢.

术语:读(源),写(目标)

  1. 将所有指令标记为每个寄存器的WRITES TO或READS FROM(使用http://ref.x86asm.net/coder32.html获取此处所述的所有信息).
  2. 跟踪对寄存器的所有读写操作,并找出何时可以免费使用.例:
    • 寄存器X由5处的指令写入.
    • 寄存器X正在被8处的指令读取.
    • 寄存器X由15处的指令写入.
    • 然后我可以说寄存器X没有在8-15之间被读取并且在15处被重新分配.这意味着它在指令8和15之间是空闲的但是在5-8之间忙.

它能解决问题还是有意义?我也对其他解决方案持开放态度.

评论后更新:

我看到JMPS /调用/条件移动搞砸了所有这些.只是为了保证它的安全(安全=自由寄存器真的是免费的),做这样的事情怎么样:当我看到每个跳转/调用/条件移动到外面时,我将所有寄存器标记为"正在读取",最大程度上是悲观的哈罗德描述的假设.我相信在这种情况下我会有更安全的结果,即使它不会很好,因为寄存器大部分时间都处于繁忙状态.您是否同意我的结果会以这种方式安全?

说明:

  • 1指令:写入寄存器X.
  • 3指令:条件JMP/MOV/CALL.
  • 5指令:写入寄存器X.
  • 8指令:从寄存器X读取.
  • 15指令:写入寄存器X.

结果:

  • 在1-3之间:寄存器X正忙,因为我在3处读取外部重新定位为READ.
  • 在3-5之间:寄存器X是免费的,因为不再读取.
  • 在5-8之间:寄存器X忙,因为在8处有读操作.
  • 8-15之间:注册X是免费的.

更新2

我会将应用程序拆分为基本块,其中每个块代表跳转(也是条件),调用和返回之间的一大块代码.跳转语句将是块的结尾.然后,我将分析每个块,假设所有寄存器在开始时都在使用.我可能会错过很多免费的寄存器,但当我得到一个,我会知道那个是真的免费的=)

更新3

我仍在尝试根据反馈改进解决方案(感谢哈罗德).

我已经阅读了活体分析,据我所知,建议从应用程序的最后分析到开始.但我不知道在编译程序集中应用程序的结束,如下面的评论中提到的停止问题,所以我将对未来的分支进行相反的处理.

  1. 按照描述标记所有说明.读=源,写=目的地.条件移动计为读取到源并写入目标.
  2. 将所有指令分成块.使用任何条件或直接分支出口拆分它们.
  3. 将所有块链接到彼此,每个块都有may_continue_with容器,该容器保存指向它可能继续的分支的指针.
  4. 如果寄存器X在A索引处是空闲的,请询问一个块.块检查在索引A之后是否首次访问寄存器X是读取还是写入操作.首先,它检查自己的指令,如果它没有找到在寄存器上运行的任何指令,它会向未来的分支询问相同的问题.(未来的分支会进一步询问他们是否没有任何访问寄存器X的指令).该块返回:
    • 如果任何未来的分支首先具有读访问权,则为 false
    • 如果所有未来的分支首先具有写访问权限,则为 true(只有一个分支不够,因为我们不知道将执行哪个分支).

x86 assembly reverse-engineering cpu-registers

2
推荐指数
1
解决办法
192
查看次数

Bash 函数可以多次缩进管道线,而无需等待整个输入

我想要实现的目标:

  • 定义一个可用于管道输入的函数,例如echo input | my_function
  • 该函数修改每个输入行,例如,在开头添加缩进。
  • 该函数可以重复使用两次,在这种情况下会对其进行修改(双缩进)两次,例如echo input | my_function | my_function结果为\t\tinput.
  • 此函数不等待提供完整的输入,它可以直接打印出该行,而无需查看所有输入。

至于我的测试,请看以下脚本:

#!/usr/bin/env bash

main() {
  echo 'first:'
  echo 'once' | tab_indent_to_right
  echo 'twice' | tab_indent_to_right | tab_indent_to_right
  {
    echo 'wait 2 sec'
    sleep 2
    echo 'wait 2 sec'
    sleep 2
    echo 'waited'
  } | tab_indent_to_right
}

tab_indent_to_right() {
  # while read -r line; do echo $'\t'"$line"; done  #  double indent not working
  # awk -v prefix='\t' '{print prefix $0}'          #  buffer not …
Run Code Online (Sandbox Code Playgroud)

linux bash shell scripting

2
推荐指数
1
解决办法
83
查看次数

正则表达式匹配 PowerShell 代码中的“此处字符串”

我正在寻找一个正则表达式来匹配 PowerShell 中的字符串 @'...'@并且@"..."@这里的字符串

规则:

  1. 开始后总是跟随新行(@'@")
  2. 结束后没有字符('@'@),它总是在行首,但是可以有更多的文本
  3. 外部@' .. '@可能包括内部@" "@但在这种情况下,外部将匹配。

例子

  1. 将匹配外部的示例
$MyString = @"
hello
@'
'@
bye
"@
Run Code Online (Sandbox Code Playgroud)
  1. 将匹配内部的示例
$MyString = @'
hello
@"
"@
bye
'@
Run Code Online (Sandbox Code Playgroud)
  1. 微软的例子
$page = [XML] @"
    <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
    xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" 
    xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
    <command:details>
            <command:name>
                   Format-Table
            </command:name>
            <maml:description>
                <maml:para>Formats the output as a table.</maml:para>
            </maml:description>
            <command:verb>format</command:verb>
            <command:noun>table</command:noun>
            <dev:version></dev:version>
    </command:details>
    ...
    </command:command>
"@
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助。我正在尝试解决内联问题,以便更好地为privacy.sexy 提供PowerShell 模板支持,因此您的帮助将在社区中扩展到更多。

regex powershell

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