определение интерфейса

Мне использовали модель данных несколько приложение, что я теперь должен использоваться другими разработчиками вне команды. Модель должна только быть сделана частично доступной разработчикам.

Интересно, как я лучше всего приближаюсь к этому: мой текущий подход должен создать новый проект, который просто копирует orginal модель, и только включайте требуемые свойства.

например,

namespace Model
{
    public class Car
    {
        private double m_speed;
        private FuelType m_fuelType;

        public double Speed
        {
            get { return m_speed; }
            set { m_speed = value; }
        }       


        public FuelType FuelType
        {
            get { return m_fuelType; }
            set { m_fuelType = value; }
        }
    }
}

В моей Облегченной Модели я только хочу выставить скорость:

using Model;

namespace ModelLite
{
    public class Car
    {
        private Model.Car car = new Model.Car();

        public double Speed
        {
            get { return this.car.Speed; }
            set { this.car.Speed = value; }
        }

    }
}

Так как модель является большой, это вовлекает в большое количество дублирования. Возможно, существует лучшая альтернатива?

Спасибо

6
задан Tarscher 18 January 2010 в 10:45
поделиться

3 ответа

Взгляните на работу Мартина Фаулера на фасадах приложений и шаблон фасада

2
ответ дан 17 December 2019 в 07:04
поделиться

Вы можете посмотреть на использование нескольких интерфейсов

public interface ICarBasic
{
    double Speed { get; set; }
}

public interface ICar : ICarBasic
{
    FuelType FuelType { get; set; } 
}

или напишите весь ваш основной объект в качестве базовых классов. Наследует от них, чтобы сделать полные классы, используя новую сборку. Предоставление разработчикам OUT на стороне проекта только сборка с базовыми классами в мощь ваша проблема.

Сборка 1 (для других разработчиков)

using Model;         

namespace ModelLite         
{         
    public class Car         
    {         
        private Model.Car car = new Model.Car();         

        public double Speed         
        {         
            get { return this.car.Speed; }         
            set { this.car.Speed = value; }         
        }         

    }         
}    

сборка 2 (полностью представлена)

using ModelLite

namespace Model          
{          
    public class Car : ModelLite.Car         
    {          
        private FuelType m_fuelType;          

        public FuelType FuelType          
        {          
            get { return m_fuelType; }          
            set { m_fuelType = value; }          
        }          
    }          
}     

дает только сборку 1 другим разработчикам.

0
ответ дан 17 December 2019 в 07:04
поделиться

Нет решения этой проблемы. Если разным разработчикам разрешено иметь только частичный доступ к полям, то необходимо создать разные фиды для разных разработок.


Хотя ваша модель кажется мне неправильной, вы можете достичь этого, создав:

  • один объект feed, который имеет все свойства, основной объект также имеет
  • Создайте какой-нибудь атрибут типа:

 class FeedSecurityAttribute : Attribute  
 {   
       public FeedSecurityAttribute(params string[] rights) {}  
 }

  • Добавить аннотации к свойствам ленты, указывающие, кто имеет доступ к этому свойству типа [FeedSecurity("piet", "klaas")] строка MyProperty { get;set; }
  • Автоматически заполнять объект ленты из бизнес-объекта, используя несколько деревьев отражения и выражения, и проверять, имеет ли пользователь доступ к этому свойству, в противном случае игнорируя его.
2
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: