Связка BusinessObject - Mapper - Gateway
От: sLMoloch Беларусь http://slmoloch.blogspot.com
Дата: 05.02.07 15:26
Оценка:
Привет.
Может у кого будут дельные советы по следующей проблеме:

Есть BusinessObject

public class TaxEntity : ITaxEntity
    {

        private ITaxRow taxRow;

        public TaxEntity(ITaxRow taxRow)
        {
            this.taxRow = taxRow;
        }

        public decimal? Amount
        {
            get
                        {
                 return taxRow.Amount;
            }
            set
            {
                  taxRow.Amount = value;
            }
        }

        #endregion

        
        public ITaxRow TaxRow
        {
            get { return taxRow; }
        }
    }


и маппер на эту ентити:

    public class TaxMapper : ITaxMapper
    {
        private ITaxGateway gateway;


        public TaxMapper(ITaxGateway gateway)
        {
            this.gateway = gateway;
        }

        
                public ITaxEntity GetPurchaseOrderTax(int orderId)
        {
            return new TaxEntity(gateway.GetPurchaseOrderTax(orderId));
        }

        public void UpdatePurchaseOrderTax(ITaxEntity tax)
        {
            gateway.UpdatePurchaseOrdertax(tax.TaxRow);
        }
    }


Идея — маппер знает все о том как поднимать и сохранять BusinessEntity, а она в свою очередь ничего о нем не знает:


ITaxEntity tax = taxMapper.GetPurchaseOrderTax(orderId);

// Do smth with tax 

taxMapper.UpdatePurchaseOrderTax(tax);


Проблема:

Из BusinessEntity "торчит" объект, который представляет собой одну запись в таблице (TaxRow), для того чтобы маппер мог достать его и передать в Gateway. Это естественно нарушает инкапсуляцию и му4ает мою совесть — так как я хочу исклю4ить любую возможность доступа из бизнеслогики к датааксесс классам.

Вопрос:

Как избавиться от этого поля?
Все фигня кроме п4ел... П4елы впринципе тоже фигня, но их много.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.