2010-12-12 2 views
0

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

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

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

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

ответ

1

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

  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); 

Имейте в виду - этот код предназначен для вас. Это далеко не хорошо.

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

P.s. критика приветствуется, как обычно

+0

Refferal offer, как стимулы мы даем издателю, если он купил любого человека на нашем сайте в качестве издателя. Предложение обычно содержит некоторую сумму денег, предоставленную человеку, который купил другого человека. Предложение Refferal не является специфическим для издателя, предложение действительно на какое-то время, если человек приносит другого человека, он получает деньги в соответствии с предложением. Через несколько дней предложение распадается и создается новое предложение. Издатель может принести любое число пользователей в качестве издателя. Я не могу связывать отношения между издателем и предложением. Я создаю предложение как отдельную сущность или сделаю vo издателя – kamal

+0

@kamal обновил мой ответ –

+0

Что такое Refferal в вашем RefferalOFFer, я имею в виду то, что он содержит. Будет ли у издателя список . public void SendBucksToLuckyBastards (IMoneyTransferService mts). Мне интересно, как вы можете использовать сервис в домене. – kamal

Смежные вопросы