private EntryViewerModel([NotNull] DreamEntry entry, int entryNumber, [NotNull] IDreamDiaryBus bus)
 {
     _entry         = entry ?? throw new ArgumentNullException(nameof(entry));
     _entryNumber   = entryNumber;
     _dreamDiaryBus = bus ?? throw new ArgumentNullException(nameof(bus));
     DreamDate      = entry.Date.ToShortDateString();
     DreamText      = entry.Text;
     DreamTags      = entry.GetTagString();
 }
Exemple #2
0
 public FrmMain([NotNull] IEdreamsFactory factory)
 {
     InitializeComponent();
     _factory   = factory ?? throw new ArgumentNullException(nameof(factory));
     _viewModel = factory.CreateDreamDiaryViewModel();
     BindingSource.DataSource        = _viewModel;
     _dreamDiaryBus                  = new DreamDiaryBus(_viewModel, factory.CreateDreamReaderWriterFactory());
     _dreamDiaryBus.DiaryPersisted  += (s, e) => RefreshEntries();
     _dreamDiaryBus.SearchPerformed += (s, e) => RefreshEntries();
     InitializeInterface();
 }
 // Why make this a static method? Because I'm initializing EntryViewerModel from another entity (i.e. DreamEntry)
 // even if the constructor, for convenience, is going to take the same parameters, I prefer to hide this fact from callers.
 // The method makes it clear we're doing some work behind the scenes to set the properties of EntityViewerModel
 // from another object. This would not be clear from the constructor
 // If at some point I have the need to provide the properties myself, then I will make a public constructor for that
 public static EntryViewerModel FromEntry([NotNull] DreamEntry entry, int entryNumber,
                                          [NotNull] IDreamDiaryBus dreamDiaryBus)
 {
     if (entry == null)
     {
         throw new ArgumentNullException(nameof(entry));
     }
     if (dreamDiaryBus == null)
     {
         throw new ArgumentNullException(nameof(dreamDiaryBus));
     }
     return(new EntryViewerModel(entry, entryNumber, dreamDiaryBus));
 }