我有一个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模型.
这对于表示层来说已经足够了.我现在想连接到数据库以检索人物对象以呈现它.
我必须创造:
PersonEntity
in Domain Layer
:数据库实体的聚合,用于与数据库的映射.它位于Domain
层中.
Person
in Domain Layer
:这是DDD的域模型.我会在这里提出一些逻辑,我不想像DDD建议的那样发送实体对象.
好的,我已经有3个人模特彼此非常相似.如何进行数据访问和服务呢?
PersonService
in Application Layer
:当我的表示层想要与该层通信时,它需要将其PersonModel
(MVVM模型)转换为Person
(域模型).然后,应用程序层中的此服务将Person
(域模型)转换为PersonEntity
(实体对象)并对数据库执行CRUD.此服务还使用PersonService
域层中的另一个(见下文)来检查/应用某些业务规则.
PersonService
in Domain Layer …
我想初始化一个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) 我如何转储带有其自身依赖项的pickle对象?
泡菜对象通常是从笔记本生成的。
我尝试virtualenv
为笔记本创建跟踪依赖关系的方法,但是这样我不仅获得了pickle对象的导入,而且还获得了应用程序其他位置使用的更多对象,这虽然足够好,但不是最佳解决方案。
我正在尝试建立MLOps流。快速说明:MLOps是一个流行语,它是用于机器学习的DevOps的同义词。不同公司提供了不同的PaaS / SaaS解决方案,它们通常解决以下问题:
我将跳过存储部分,重点介绍前两个部分。
就我而言,我试图使用良好的旧TeamCity建立此流程,其中模型是sk-learn生成的咸菜对象。要求是:
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)
requirements.txt
。它是pickle模型的API包装器/层,将模型加载到内存中并提供来自其余端点的预测。然后,TeamCity中的构建配置将解析该文件并执行以下操作:
requirements.txt
将预测器与requirements.txt
泡菜模型合并作为流的输出,我有一个包含REST API的程序包,该API使用了pickle模型并暴露给定义的端口。
我有一个应用程序的汇编指令列表,我想知道哪些寄存器可以免费使用,以及在列表的任何索引处使用了哪些寄存器.
如何知道寄存器何时被使用以及何时被释放(可以再次使用)?我的目标是到达真正免费的寄存器.
这是我解决问题的假设,因为我对装配知识如此有限,所以听起来可能很愚蠢.
术语:读(源),写(目标)
它能解决问题还是有意义?我也对其他解决方案持开放态度.
评论后更新:
我看到JMPS /调用/条件移动搞砸了所有这些.只是为了保证它的安全(安全=自由寄存器真的是免费的),做这样的事情怎么样:当我看到每个跳转/调用/条件移动到外面时,我将所有寄存器标记为"正在读取",最大程度上是悲观的哈罗德描述的假设.我相信在这种情况下我会有更安全的结果,即使它不会很好,因为寄存器大部分时间都处于繁忙状态.您是否同意我的结果会以这种方式安全?
说明:
结果:
更新2
我会将应用程序拆分为基本块,其中每个块代表跳转(也是条件),调用和返回之间的一大块代码.跳转语句将是块的结尾.然后,我将分析每个块,假设所有寄存器在开始时都在使用.我可能会错过很多免费的寄存器,但当我得到一个,我会知道那个是真的免费的=)
更新3
我仍在尝试根据反馈改进解决方案(感谢哈罗德).
我已经阅读了活体分析,据我所知,建议从应用程序的最后分析到开始.但我不知道在编译程序集中应用程序的结束,如下面的评论中提到的停止问题,所以我将对未来的分支进行相反的处理.
may_continue_with
容器,该容器保存指向它可能继续的分支的指针.我想要实现的目标:
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) 我正在寻找一个正则表达式来匹配 PowerShell 中的字符串 @'...'@
并且@"..."@
是这里的字符串
规则:
@'
或@"
)'@
或'@
),它总是在行首,但是可以有更多的文本@' .. '@
可能包括内部@" "@
但在这种情况下,外部将匹配。例子
$MyString = @"
hello
@'
'@
bye
"@
Run Code Online (Sandbox Code Playgroud)
$MyString = @'
hello
@"
"@
bye
'@
Run Code Online (Sandbox Code Playgroud)
$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 模板支持,因此您的帮助将在社区中扩展到更多。
architecture ×1
assembly ×1
bash ×1
c++ ×1
c++17 ×1
data-science ×1
dependencies ×1
devops ×1
linux ×1
mvvm ×1
noncopyable ×1
pickle ×1
powershell ×1
python ×1
regex ×1
scripting ×1
shell ×1
wpf ×1
x86 ×1