2010-01-18 63 views
6

我有一个由多个应用程序使用的数据模型,我现在需要由团队之外的其他开发人员使用。该模型只能被开发者部分利用。定义界面

我想知道我最好的方法是:我目前的方法是创建一个新的项目,只复制原始模型,只包含所需的属性。

例如

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

    } 
} 

因为模型大,这涉及了很多重复的。也许有更好的选择?

谢谢

回答

2

就以Application Facades看看由Martin Fowler的工作和Facade Pattern

+0

我认为Application Facades的链接应该是http:// martinfowler。com/apsupp/appfacades.pdf – Kane 2010-01-18 11:00:33

+0

已更改。谢谢。 – 2010-01-18 16:03:58

2

这个问题没有解决办法。如果不同的开发人员只允许部分访问字段,则需要为不同的开发人员创建不同的供稿。


虽然你的模型似乎只是我错了,你可能会但是通过做到这一点:

  • 创建具有主要对象也有
  • 创建像一些属性的所有属性一个供给对象:

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

  • 添加在饲料中指定谁可以访问这个属性像[FeedSecurity("piet", "klaas")] string MyProperty { get;set; }
  • 自动使用一些反射和表达式树从业务对象填写您的饲料对象的属性注释,并检查用户是否有权访问财产,否则忽略它。
0

你可能可以看看使用多个接口

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

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

或写你的所有基本对象作为基类。从它们继承,使用新的程序集制作完整的类。为开发者提供项目时,只有具有基类的程序集才能解决您的问题。

组件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

这基本上是塔尔舍在他的第一篇文章中所说的。当您需要为> X个不同的Feed版本提供支持时,这是无法维护的。 – 2010-01-18 11:08:45

+0

原来的帖子是相反的。他实施了两次速度。我的建议只有一次。从何时开始,继承是不可维护的? – Nanook 2010-01-18 11:33:03

+0

如果你有'class Car {Model;年;汽油; }'并且想要暴露'Model;年;'对一个人,'燃料;模型;对另一个和'年;燃料;给别人。 – 2010-01-18 11:42:16