Мне использовали модель данных несколько приложение, что я теперь должен использоваться другими разработчиками вне команды. Модель должна только быть сделана частично доступной разработчикам.
Интересно, как я лучше всего приближаюсь к этому: мой текущий подход должен создать новый проект, который просто копирует 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; }
}
}
}
Так как модель является большой, это вовлекает в большое количество дублирования. Возможно, существует лучшая альтернатива?
Спасибо
Вы можете посмотреть на использование нескольких интерфейсов
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 другим разработчикам.
Нет решения этой проблемы. Если разным разработчикам разрешено иметь только частичный доступ к полям, то необходимо создать разные фиды для разных разработок.
Хотя ваша модель кажется мне неправильной, вы можете достичь этого, создав:
class FeedSecurityAttribute : Attribute
{
public FeedSecurityAttribute(params string[] rights) {}
}
[FeedSecurity("piet", "klaas")] строка MyProperty { get;set; }