我有一张桌子可以被其他应用程序填充。此表包含名为IsMailSent
的属性。
EF根据数据库数据构建类型为Request
的对象。
对象看起来像这样:
public class Request {
int SomeInt;
bool IsMailSent;
SomeObject SomeObject;
}
现在我想创建一个服务,它将使用IsMailSent == false
加载所有条目并将此邮件发送给收件人。
我目前的代码如下:
一个名为MailMessageService的类获得了Start()
和Stop()
方法。 Start
方法如下所示:
public void Start(int delay) {
tokenSource = new CancellationTokenSource();
T = new Task(() => {
MailService ms = new MailService(Res.ServerAddress, int.Parse(Res.ServerPort));
while (true) {
var messages = GetMailMessages(_context.Requests.Where(o => !o.IsMailSent));
ms.Send(messages);
Thread.Sleep(delay);
}
}, tokenSource.Token);
}
方法GetMailMessages
收到Request
的集合,并构建MailMessages
的集合。目前,我创建了一个继承自MailMessage
的类,并包含对相应Request对象的引用。背后的想法是MailService
(负责发送邮件)应将IsMailSent
属性设置为true
。
因此
Send()
方法应设置IsMailSent = true
但这是最好的方法吗?据我了解SOLID原则,MailService
不应负责设置此属性(因为它负责发送邮件) - 或者我错了?
答案 0 :(得分:2)
您可以添加一种方法,将Request
设置为Request
类。因此,IsMailSent
类最终会决定是否将true
设置为Request
。这样设置代码仍然在public class Request {
// Property
public bool IsMailSent { get; private set; }
public void MailSent() {
// TODO check some conditions
if (...) {
...
}
// If everything is correct set the property
IsMailSent = true;
}
}
类中,仍然可以影响集合。
E.g。
MailService.Send(...)
在MailSent
中调用[['title'], 'required','on'=>'create'],
方法。