Совокупный вопрос об объектах - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть две сущности Publisher и ReferralOffer.Предложение действительно только в течение 2 месяцев.Издатель, который приводит другого человека в качестве реферала, получает деньги, которые описаны для этого предложения.Один издатель может принести столько людей, сколько он может для конкретного предложения.По истечении некоторого периода, когда предложение истекает, и генерируется новое.

1) Теперь вопрос в том, что Publisher - это мой корневой агрегат, но refferaloffer - это часть агрегата Publisher.или refferaloffer является отдельным агрегатом.

2) Является ли refferaloffer объектом значения.

3) как создать класс, в котором можно поддерживать refferedTo и refeeredBy.

1 Ответ

1 голос
/ 14 декабря 2010

Я прочитал вики-статью о реферальном маркетинге, но этого мне недостаточно для понимания Вашего бизнеса.

  1. Что такое реферальное предложение в вашем случае?
  2. Какие проблемы Вы пытаетесь решить?Цель вашей заявки?
  3. Является ли издатель реферального предложения конкретным?
  4. Может ли несколько издателей привлечь людей для одного конкретного реферального предложения?

Попытается отразить некоторые идеикод.

Имейте в виду - у меня мало знаний в области бизнеса.

Пропуск / игнорирование огромного количества деталей (например, технические трудности, которые могут возникнуть или даже связанные с доменом вещи, например, когда реферал становится издателем).

Но, надеюсь, этодать вам несколько идей.

 public class Publisher:Root{}

/*
 I believe it's a root, because multiple publishers can
 bring referrals to one particular referral offer

 it could be modeled as entity if offers were given for
 publishers individually

 it's certainly not a value object, because we care about identity
 of particular offer disregarding it's state.

 I'm ignoring possibility that there might be various incentives
 with common structure/behavior
*/
public class ReferralOffer:Root{
 public bool IsActive(){ 
  return _startedOn.AddMonths(-_lengthInMonths)>DateTime.Now;
 }
 public void BringReferral(string referralName, Publisher boughtBy){
  if (IsActive()) _referrals.Add(new Referral(referralName,boughtBy));
 }
 private List<Referral> _referrals;
 public void SendBucksToLuckyBastards(IMoneyTransferService mts){
  if (!IsActive()&&!_awardsSent){
    _referrals.SelectMany(r=>r.BoughtBy)
     .ForEach(p=>mts.SendToPublisher(p,_award));
    _awardsSent=true;
   }
 }
 public ReferralOffer(Money award, int lengthInMonths){
  _award=award;
  _lengthInMonths=lengthInMonths;
  _startedOn=DateTime.Now;
 }
 //assuming it's amount for each referral and not total
 private Money _award;
 private int _lengthInMonths;
 private DateTime _startedOn;
 private bool _awardsSent;
}

/*
 referral - person who is bought by publisher and who eventually
 might become a publisher

 if referral automatically becomes a publisher - likely this should
 be modeled otherwise

 entity, because it makes no sense w/o referral offer
*/
public class Referral:Entity{ 
 public Publisher BoughtBy{get; private set;}
 public string Name{get; private set;}
 //internal, because only offer constructs them
 internal Referral(string name,Publisher boughtBy){
  BoughtBy=boughtBy;
  Name=name;
 }
}

var me=publisherRepository.ByFullName("Arnis Lapsa");
var offer=new ReferralOffer(200,2);
offer.BringReferral(me, "kamal");
//two months later
offer.SendBucksToLuckyBastards(moneyTransferService);

Имейте в виду - этот код только для того, чтобы помочь вам.Это далеко не хорошо.

Постарайтесь досконально понять код и увидеть смысл каждая строка кода.

Ps критика приветствуется как обычно

...