Я прочитал wiki article о реферальном маркетинге, но этого недостаточно для понимания вашего бизнеса.
- Что такое реферальное предложение в вашем случае?
- Какие проблемы вы пытаетесь решить? Цель вашего заявления?
- Является ли реферальным предложением издателем?
- Может ли более одного издателя привлечь людей к одному конкретному реферальному предложению?
будет пытаться отразить некоторые идеи в коде.
Имейте в виду - у меня мало знаний о домене бизнеса.
Опущение/игнорирование Огромное количество количество деталей (например, технические трудности, которые могут возникнуть или даже связанные с доменом вещи, например, когда реферал становится издателем).
Но, надеюсь, это может дать вам некоторые идеи.
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);
Имейте в виду - этот код предназначен для вас. Это далеко не хорошо.
Попытайтесь понять код полностью и см. Последствия каждая строка кода.
P.s. критика приветствуется, как обычно
Refferal offer, как стимулы мы даем издателю, если он купил любого человека на нашем сайте в качестве издателя. Предложение обычно содержит некоторую сумму денег, предоставленную человеку, который купил другого человека. Предложение Refferal не является специфическим для издателя, предложение действительно на какое-то время, если человек приносит другого человека, он получает деньги в соответствии с предложением. Через несколько дней предложение распадается и создается новое предложение. Издатель может принести любое число пользователей в качестве издателя. Я не могу связывать отношения между издателем и предложением. Я создаю предложение как отдельную сущность или сделаю vo издателя – kamal
@kamal обновил мой ответ –
Что такое Refferal в вашем RefferalOFFer, я имею в виду то, что он содержит. Будет ли у издателя список. public void SendBucksToLuckyBastards (IMoneyTransferService mts). Мне интересно, как вы можете использовать сервис в домене. –
kamal