public class RaciModel : Model
public class ComponentModel : Model
public Model Data {get; set;}
public class ComplexProcessModel : Model
public ComponentModel ComponentModel {get; set;}
public class ProductModel
public virtual TModel CreateObjectModel<TModel>()
where TModel : Model, new()
public virtual Model SetModel(Model model )
public abstract class ProductDecorator : ProductModel
protected ProductModel Product { get; set; }
public ProductDecorator(ProductModel product)
public class ComplexProcessProductDecorator : ProductDecorator
public ComplexProcessProductDecorator(ProductModel product) : base(product)
public override Model SetModel(Model model )
var newModel = Product.SetModel(model);
if (newModel is ComplexProcessModel)
var complexProcessModel = newModel as ComplexProcessModel;
var componentModel = new ComponentModel();
componentModel.Data = new RaciModel();
complexProcessModel.ComponentModel = componentModel;
return complexProcessModel;
public class BaseBussinesHelper<TModel>
where TModel : Model, new()
public ProductModel GetProductModel()
return new ProductModel();
public class ComplexProcessBusinessHelper : BaseBussinesHelper<ComplexProcessModel>
var product = GetProductModel();
var complexProcessProductDecorator = new ComplexProcessProductDecorator(product);
var complexProcessModel = product.CreateObjectModel<ComplexProcessModel>();
product.SetModel(complexProcessModel);
return complexProcessModel;
public static void Main()
var complexProcessBusinessHelper = new ComplexProcessBusinessHelper();
var complexProcessModel = complexProcessBusinessHelper.InitItem();