Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class PriceList
- {
- public Guid Id { get; private set; } // Identitet
- public DateRange ActivePeriod { get; private set; } // Value Object
- public PriceListStatus Status { get; private set; } // Status u životnom ciklusu
- // Povezanost sa drugim entitetima/agregatima preko ID-a ili referenci
- public Guid CreatedByEmployeeId { get; private set; }
- public Guid? PublishedByEmployeeId { get; private set; }
- public Guid? ClosedByEmployeeId { get; private set; }
- // Kolekcija stavki cenovnika (PriceListItems) - možda lista Value Objekata ili entiteta u zavisnosti od konteksta
- private List<ProductPrice> _productPrices;
- public IReadOnlyCollection<ProductPrice> ProductPrices => _productPrices.AsReadOnly();
- private List<Correction> _corrections; // Skup ispravki na cenovnik
- public IReadOnlyCollection<Correction> Corrections => _corrections.AsReadOnly();
- public PriceList(Guid id, DateRange activePeriod, Guid createdByEmployeeId)
- {
- Id = id;
- ActivePeriod = activePeriod ?? throw new ArgumentNullException(nameof(activePeriod));
- CreatedByEmployeeId = createdByEmployeeId;
- Status = PriceListStatus.Draft; // Inicijalno stanje
- _productPrices = new List<ProductPrice>();
- _corrections = new List<Correction>();
- // Self-validating: Validacija pri konstrukciji
- // Dodatna validacija ako postoji specifično pravilo pri kreiranju
- }
- // Behavior-rich metode koje menjaju stanje i uključuju self-validaciju
- public void Publish(Guid publishedByEmployeeId)
- {
- if (Status != PriceListStatus.Draft)
- {
- throw new InvalidOperationException("Only draft price lists can be published.");
- }
- // Dodatna poslovna pravila pre publikovanja
- Status = PriceListStatus.Published;
- PublishedByEmployeeId = publishedByEmployeeId;
- }
- public void Close(Guid closedByEmployeeId)
- {
- if (Status == PriceListStatus.Closed || Status == PriceListStatus.Expired)
- {
- throw new InvalidOperationException("Price list is already closed or expired.");
- }
- // Dodatna poslovna pravila pre zatvaranja
- Status = PriceListStatus.Closed;
- ClosedByEmployeeId = closedByEmployeeId;
- }
- public void AddCorrection(Correction correction)
- {
- if (Status == PriceListStatus.Closed)
- {
- throw new InvalidOperationException("Cannot add corrections to a closed price list.");
- }
- // Dodatna validacija za samu korekciju
- _corrections.Add(correction);
- }
- public ProductPrice GetPriceForProduct(Guid productId)
- {
- // Logika za pronalaženje cene, npr. uzimanje u obzir korekcija
- return _productPrices.FirstOrDefault(pp => pp.ProductId == productId);
- }
- // ... druge metode koje podržavaju životni ciklus i ponašanje
- }
- public enum PriceListStatus
- {
- Draft,
- Published,
- Closed,
- Expired
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement