2010-01-18 78 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