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