5

Tengo un problema tratando de diseñar mi solución VS y me gustaría recibir algunas sugerencias, por favor.¿Cómo se puede diseñar esta solución ASP.NET n-tier?

Actualmente, mi diseño solución tiene el siguiente proyecto: -

Foo.Models 
Foo.Repositories 
Foo.Services 
Foo.Web (an ASP.NET MVC application) 

mi sitio web (Foo.Web) llama a varios métodos en el espacio de nombres Foo.Services. La idea aquí es que el Services maneja toda la lógica de negocios . El espacio de nombre Model son solo objetos POCO. Repositories namespace es autoexplicativo.

Constructor Dependencia Inyección con interfaces maneja la magia negra de qué capa requiere qué componente.

Problema: Me gustaría añadir algo de código Windows Workflow Foundation (WWF) en la solución, pero poner este código WWF en la misma Foo.Services.dll.

Para hacer esto necesito hacer otro proyecto de tipo Workflow. Este flujo de trabajo tiene actividades que llaman a los métodos de Foo.Services. Como tal, mi sitio web ahora tiene que llamar al método de servicios O a los métodos de flujo de trabajo para hacer cosas.

Esperaba que el sitio web solo llamara al espacio de nombres Services para hacer cosas.

Después de todo, el servicio es la interfaz principal entre la interfaz de usuario y la lógica de negocios, IMO. El hecho de que técnicamente uso WWF no debería ser una preocupación para alguien que codifica en la interfaz de IUI.

Debido a que el flujo de trabajo dll llama a los métodos en el dll de Servicios, los servicios no pueden llamar a los métodos en el flujo de trabajo debido a dependencia circular.

Tampoco puedo mover todo el código de flujo de trabajo EN el dll de Servicios porque los Servicios deben ser de algún tipo de proyecto especial (de tipo Windows Workflow).

Entonces ... ¿no estoy seguro de qué hacer?

¿Cómo puedo hacerlo para que los consumidores solo hagan referencia al espacio de nombres de Servicios para asuntos de negocios y el hecho de que implique que este asunto de negocios en WWF está oculto para el consumidor?

¿Necesito hacer un proyecto de WWF y mover todo mi código de servicios a ese, el viejo proyecto de servicio? Hacer esto no suena muy reutilizable. ¿Qué sucede si decido no usar WWF para manejar ciertas acciones de pipline y usar algo más?

Aquí hay algunos códigos para ayudar a explicar.

HomeController.cs 
public ActionResult Index() 
{ 
    // StockService was created using constructor dependency injection. 
    var viewData = _stockService.GetStocks(StockType.MostPopular); 
    return (viewData) 
} 

StockService.cs 
public class StockService : IStockService 
{ 
    public IEnumerable<Stock> GetStocks(StockType stockType) 
    { 
     // Dependency Injection defines if the Pipeline is WWF 
     // or something else (eg. plain ole functions). 
     var stocks = _stockPipeline.GetStocks(stockType); 

     // Cache result. 

     // Update repostiory. (example of calling the repository) 
     _sqlRepostiory.SaveSomeRandomData("Jon Skeet Was Here."); 

     return stocks. // Returns a POCO. 
    } 
} 

, gracias píos.

Respuesta

1

¿Has mirado el proyecto MVC Storefront/Kona de Rob Connery? Él está haciendo a very similar thing with WF, y su proyecto es laid out in a somewhat similar way. Podría ser good guidance por lo que está haciendo. Sé que sí trabajó con algún experto de Workflow Foundation en el diseño de su integración.

+0

seguro tener. ahí es donde basé mis cosas. Estoy un poco confundido por sus cambios de SF -> Kona. –

0

Una posible solución sería añadir una capa de 'Aplicación'

Application ---> Services 
        ^
        | 
      \--> Workflow 

y llamar a la capa de aplicación desde la interfaz de usuario. Por supuesto, en la mayoría de los casos, la capa de aplicación solo reenvía las llamadas a los servicios o al flujo de trabajo.

0

FYI- Es posible modificar un proyecto que no sea de flujo de trabajo para permitir la adición de clases de flujo de trabajo. Detalles here.

+1

Entonces, aunque puedo cambiar el proyecto de la biblioteca de clase a un proyecto de WF ... ¿eso realmente responde mi problema desde una perspectiva arquitectónica? Se puede hacer, pero ¿DEBERÍA estar haciendo esto? –

Cuestiones relacionadas