Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果必须在应用程序的多个位置实现最小的更改,那么最好的方法是什么?_C#_.net_Design Patterns - Fatal编程技术网

C# 如果必须在应用程序的多个位置实现最小的更改,那么最好的方法是什么?

C# 如果必须在应用程序的多个位置实现最小的更改,那么最好的方法是什么?,c#,.net,design-patterns,C#,.net,Design Patterns,不久前,我们在DMS系统的应用程序中实现了模拟。我们这样做是因为用户不应该访问文档页面的物理文件 因此,用户登录到我们的应用程序,被模拟成一个特殊用户,这样他就可以从我们的应用程序中访问他需要的文件 当这个模拟被计划时,我们并不认为这是一件伟大的事情:用户模拟一次,一切都很好。我们将代码实现到现有的方法中,在这些方法中只需要一些东西,比如模拟=true或模拟=false 这是错误的:模拟必须在多个地方启动和启动。例如,当用户希望将文档作为电子邮件发送时,您必须关闭模拟才能使用用户的邮件配置文件,

不久前,我们在DMS系统的应用程序中实现了模拟。我们这样做是因为用户不应该访问文档页面的物理文件

因此,用户登录到我们的应用程序,被模拟成一个特殊用户,这样他就可以从我们的应用程序中访问他需要的文件

当这个模拟被计划时,我们并不认为这是一件伟大的事情:用户模拟一次,一切都很好。我们将代码实现到现有的方法中,在这些方法中只需要一些东西,比如模拟=true或模拟=false

这是错误的:模拟必须在多个地方启动和启动。例如,当用户希望将文档作为电子邮件发送时,您必须关闭模拟才能使用用户的邮件配置文件,因此每当我们添加新功能时,我们都必须在有无模拟的情况下进行测试

因为我有额外的功能要实现,所以我想消除这种行为以获得一种干净的方法。但我真的不知道什么是最好的方法

我想到的第一件事是状态模式,但这将导致模拟生效的所有类都有一个模拟类和一个非模拟类。这将增加课程的数量。 另一件事是方法指针:当使用模拟调用模拟版本的函数时,否则调用非模拟版本的函数。 这将导致更多的方法。优于状态模式方法?我不这么认为

那么,您如何获得一个干净的解决方案? 我已经考虑过使用线程,但这似乎非常复杂

希望你能帮助我

问候,


inno听起来像是一个横切的方面——可能是面向方面的编程?

一个选项是定义默认行为,例如为用户启用模拟。此默认行为将在登录到系统时发生。当用户在系统中执行其他行为(如以电子邮件形式发送文档)时,可以将其封装在服务中,服务将用户作为参数,然后使用该功能所需的模拟。以你为例:

var emailService = new emailService();

//inside the service call it would apply the impersonation necessary for the operation 
emailService.send(user, new Attachment(documentToSendViaEmail));