Ich brauche einen Plan für Build-Benachrichtigungen/Warnungen System.Benachrichtigungssystem/Dienst in C# mit ASP.NET MVC
Ich habe ein Objekt namens "Kampagne" und es hat "Status". Status kann angenommen, abgelehnt, ergänzt, Arbeit und andere sein. Ich möchte Benachrichtigungen/Warnungen senden, wenn sich der Status ändert.
E.q. E-Mail-Benachrichtigung und Warnung in meinem Portal.
Ich möchte nicht alles in einem Controller, wo ich auf Kampagne arbeiten. Also habe ich über Delegierte und Veranstaltungen nachgedacht. Aber letztens weiß ich nicht genug, um das zu machen.
Was ich denke:
Domain Modell:
class Campaign {
CampaignStatus Status { get; set;}
}
abstract class Notification {
// properties
}
class EmailNotification {
// properties specific for email
}
class Alert {
// properties specific for alerts
}
class CampaignAlert {
// properties specific for campaign alerts
}
Services:
INotificationsService {
Send();
}
IAlertsService : INotificationsService {
Get(); // I need showing list of alerts too
GetAll();
Update(); // for updating info if alert was viewed.
Save(); // I need saving alerts in db.
}
Und wie ich es mit Ereignissen tun? So viel automatisch wie möglich. Natürlich kann ich den AlertsService manuell aufrufen und alarmieren. Aber das ist schlecht;)
Ich dachte darüber nach, Delegat und Event zu Campaign hinzuzufügen.
class Campaign {
public delegate void CampaignStatusChange(object sender, EventArgs e);
public event CampaignStatusChange OnCampaignStatusChange;
}
Und verbinden Veranstaltung mit:
class CampaignStatusChangeHandler {
public CampaignStatusChangeHandler(IRepository<bla bla> repository, INotificationsService notificationService) {
// these will be inject via ctor
}
//
}
Ich möchte machte es so viel wie ich kann mit SOLID, KISS und trocken. Natürlich mit TDD und I mit IoC, um Objekte zu injizieren;)
Zusammenfassung Ich brauche Benachrichtigungsdienst, den ich unabhängig senden E-Mails und Warnungen kann. Ich benötige Display-Warnungen am Frontend.
Mein Alarm Domain-Modell wie folgt aus:
public abstract class Notification
{
public string Title { get; set; }
public string Content { get; set; }
public DateTime Created { get; set; }
public NotificationType Type { get; set; }
}
public enum NotificationType
{
Email,
Alert
}
public class EmailNotification : Notification
{
public string From { get; set; }
public ICollection<string> To { get; set; }
public ICollection<string> Bcc { get; set; }
}
public class Alert : Notification
{
public object LinkedObject { get; set; }
public bool WasSeen { get; set; }
}
public class CampaignAlert : Alert
{
public CampaignAlertType CampaignAlertType { get; set; }
}
public enum CampaignAlertType
{
Accepted,
Rejected,
Active,
Finished
}
Wenn ich will Benachrichtigung an Benutzer senden ich E-Mail manchmal und Benachrichtigung gesendet werden soll. Manchmal möchte ich nur E-Mails senden und nur warnen.
Warum Builder und Strategie hier? – Nerf
@Nerf Sie benötigen möglicherweise einen Benachrichtigungsersteller, um verschiedene Benachrichtigungen basierend auf dem Kampagnenstatus (verschiedene E-Mail-Vorlagen und/oder Text) zu erstellen. Benachrichtigungsstrategie wäre nützlich, wenn Sie verschiedene Arten von Benachrichtigungen haben, z. E-Mail-Benachrichtigung, SMS, Push usw. – Andrei
Ok thx. Ich muss etwas mehr über diese Muster lesen, weil ich sie hier nicht sehe. – Nerf