2009-08-26 71 views
0

前段时间我们在我们的应用程序中实现了模拟(一个DMS系统)。我们这样做是因为用户不应该访问文档页面的物理文件。如果您必须在应用程序的多个位置实施最小更改,最佳方法是什么?

因此,用户登录到我们的应用程序,获取模拟给特殊用户,以便他可以从我们的应用程序中访问他需要的文件。

当这个模拟计划,我们不认为这将是一件伟大的事情:用户冒充一次,一切都很好。我们将代码实现到需要它的现有方法中(只是像Impersonation = true或Impersonation = false)。

这是错误的:模拟不得不在几个地方启动并开启(例如,当用户想要将文档作为电子邮件发送时,必须将模拟设置为关闭以使用用户的邮件配置文件),因此每当我们添加一个新功能,我们必须测试与不模仿。

因为我有额外的功能来实现我想灭绝这种行为来获得一个干净的方法。但我真的不知道什么是最好的方法。

进入我脑海的第一件事情就是状态模式,但是这会导致所有类模拟生效的类的模拟类和非模拟类。这会增加班级的数量。 其他的事情将是方法指针:当使用模拟调用模拟版本的函数,否则调用未模拟版本的函数。 这将导致更多的方法。比国家模式方法更好?我不这么认为。

那么,你会采取什么方法来获得一个干净的解决方案? (我已经想过使用线程,但这似乎很复杂)

希望你能帮助我。

问候,

INNO

回答

0

听起来像一个横切方面 - 也许面向方面的编程?

0

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

var emailService = new emailService(); 

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