Я прочитал вики-статью о реферальном маркетинге, но этого мне недостаточно для понимания Вашего бизнеса.
- Что такое реферальное предложение в вашем случае?
- Какие проблемы Вы пытаетесь решить?Цель вашей заявки?
- Является ли издатель реферального предложения конкретным?
- Может ли несколько издателей привлечь людей для одного конкретного реферального предложения?
Попытается отразить некоторые идеикод.
Имейте в виду - у меня мало знаний в области бизнеса.
Пропуск / игнорирование огромного количества деталей (например, технические трудности, которые могут возникнуть или даже связанные с доменом вещи, например, когда реферал становится издателем).
Но, надеюсь, этодать вам несколько идей.
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 критика приветствуется как обычно