--
Desuscripción: altnet-argenti...@googlegroups.com
--
Desuscripción: altnet-argenti...@googlegroups.com
Este metodo es consumido por un servicio de mas alto nivel (normalmente en Application), que hace algo con el resultado, lo pasa a Presentation, etc .... y tal como esta planteado funciona.
En web se utiliza mucho por request, como dijo Jorge, aunque también como dijo Jorge a veces es necesario algo mas granular.
--
Desuscripción: altnet-argenti...@googlegroups.com
Jose,En mi opinion ese codigo es tipico de un repositorio, el cual yo pongo dentro de la capa de dominio, igual que las factories.
Como dice Jorge el contexto de NH, asi como las transacciones las manejaria en la capa de aplicacion, para no ensuciar el modelo, ya que son accidentes tecnologicos. Y no se si usaria un DAO, ya que usaria un repositorio.
Si fuese asi, podrias tener un servicio de aplicacion que tenga todo lo relacionado con nhibernate y que llame al repositorio.
Por otra parte un servicio de dominio para ser un servicio de dominio tiene que ser una operacion que no guarde estado, que aplique alguna regla del dominio o modifique algo dentro del dominio y que no quede natural ponersela a una entidad...
--
Desuscripción: altnet-argenti...@googlegroups.com
veo al repository como un concepto de dominio y al dao como algo de
infraestructura
A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection.
|
public interface IRepository<T> : IQueryable<T> |
|
{ |
|
T Get(object id); |
|
T Load(object id); |
|
T MakePersistent(T entity); |
|
void Refresh(T entity); |
|
void MakeTransient(T entity); |
|
}
Extraido de mi ejemplo "Chinook Media Manager", implementaciones aquí: http://code.google.com/p/unhaddins/source/browse/trunk/Examples/uNHAddIns.Examples.WPF/ChinookMediaManager.Data.Impl/Repositories/Repository.cs Mientras que un dao luce así: public interface IDao <T>{ IList<T> FindBy(Criterio...) T Get(object id) MakePersistent() } public interface IDaoCustomer : IDao<Customer>{ IList<T> GetCustomersWith...Blabla() } De esto ultimo se desprende que el 95% de la gente que asegura estar usando repository, esta usando DAO. Este tema ya se discutió en otras listas de correo y blogposts. Existen una variante de Dao que es utilizando un mecanismo de "Especificación" Ver, Fabio Maulo Capítulo 1, Versículo 10, y dijo el tano a sus apostoles: http://fabiomaulo.blogspot.com/2009/09/repository-or-dao-dao.html |
Hola,
en la capa de aplicacion si tenes entonces referencias a NH y a
infraestructura, o sea que directamente el codigo que envie inicialmente
podria residir tal cual lo envie en la capa de aplicacion?
saludos,
Raul.
Pedro Wood escribió:
> Hola,
>
> lo que pasa es que lo único que hace eso es un get por ID + el manejo
> de transacción.....si no vas a hacer nada más es un pasa manos......
>
> Coincido con que el manejo de transacciones es responsabilidad de la
> capa de aplicación.
>
> Si vos tenés otro método de capa de aplicación que hace algo, yo
> directamente tendría el manejo de transacción ahí, llamo al
> repositorio o DAO para que devuelva el departamento, hago lo que sea
> que hay que hacer, cierro la transacción, etc...y me ahorro el
> pasamanos...
>
> Para mi sólo la interfaz del repositorio es parte del dominio, la
> implementación del repositorio o DAO es parte de la infraestructura,
> las referencias a NH me quedan sólo en la infraestructura, mi dominio
> no tiene referencias a ninguna otra capa.
>
>
> Saludos,
>
> Pedro Wood
>
>
> 2009/12/16 Leandro Boffi <lbo...@gmail.com <mailto:lbo...@gmail.com>>
>
> Jose,
>
> En mi opinion ese codigo es tipico de un repositorio, el cual yo
> pongo dentro de la capa de dominio, igual que las factories. Como
> dice Jorge el contexto de NH, asi como las transacciones las
> manejaria en la capa de aplicacion, para no ensuciar el modelo, ya
> que son accidentes tecnologicos. Y no se si usaria un DAO, ya que
> usaria un repositorio.
>
> Si fuese asi, podrias tener un servicio de aplicacion que tenga
> todo lo relacionado con nhibernate y que llame al repositorio.
>
> Por otra parte un servicio de dominio para ser un servicio de
> dominio tiene que ser una operacion que no guarde estado, que
> aplique alguna regla del dominio o modifique algo dentro del
> dominio y que no quede natural ponersela a una entidad...
>
>
>
>
> 2009/12/16 José F. Romaniello <jfroma...@gmail.com> <mailto:jfroma...@gmail.com>>
>
> En web se utiliza mucho por request, como dijo Jorge, aunque
> también como dijo Jorge a veces es necesario algo mas granular.
>
> En winforms no hay algo como el request para demarcar cuando
> inicia o no una transacción, en realidad yo utilizo AOP para
> estas cosas. Con lo cual el código que vos mandaste es mas o
> menos equivalente a esto:
>
> [PersistenceConversational]
> public class ServicioNoSeQue{
>
> private IDaoFactory _daoFactory;
>
> public ServicioNoSeQue(IDaoFactory daoFactory){
> _daoFactory = daoFactory;
> }
>
> [PersistenceConversation]
> public Departamento ObtenerDepartamento(int id){
> return _daoFactory.GetDaoOf<Departamento>().GetById(id);
> }
> }
>
> Si este es tu caso, te aconsejo mirar los posts de Fabio al
> respecto, sobre todo este:
> http://fabiomaulo.blogspot.com/2009/01/aspect-conversation-per.html
>
> Otra cosa, después de leer lo que dice Carlos Peix, se me hizo
> lio entre "servicio de aplicación" y "servicio de modelo de
> dominio".
>
> Este metodo es consumido por un servicio de mas alto nivel
> (normalmente en Application), que hace algo con el
> resultado, lo pasa a Presentation, etc .... y tal como
> esta planteado funciona.
>
>
> Me parece que lo que vos estas llamando como "Servicio de
> aplicación" es un presenter o controller. Puede ser?
> Sería algo así: View -> Presenter (Application Service) ->
> Domain Service -> Dao ??
> --
> <mailto:altnet-argentina%2Bunsu...@googlegroups.com>> Desuscripción: altnet-argenti...@googlegroups.com
> <mailto:altnet-argentina%2Bunsu...@googlegroups.com>
José,
Si bien Fowler separa entre el patrón Repository y el de Data Mapper (o como vos bien decís, DAO), para los hechos de DDD ambos son “Repositories”.
Evans en su libro se tomó la libertad de englobar los dos mecanismos dentro del mismo patrón.
Copio la cita del libro:
…All repositories provide methods that allow a client to request objects matching some criteria, but there is a range of options of how to design this interface.
The easiest REPOSITORY to build has hard-coded queries with specific parameters. These queries can be various: retrieving an ENTITY by its identity (provided by almost all REPOSITORIES); requesting a collection of objects with a particular attribute value or a complex combination of parameters; selecting objects based on value ranges (such as date ranges); and even performing some calculations that fall within the general responsibility of a REPOSITORY (especially drawing on operations supported by the underlying database)…
…Hard-coded queries can be built on top of any infrastructure and without a lot of investment, because they do just what some client would have had to do anyway.
On projects with a lot of querying, a REPOSITORY framework can be built that allows more flexible queries. This calls for a staff familiar with the necessary technology and is greatly aided by a supportive infrastructure.
One particularly apt approach to generalizing REPOSITORIES through a framework is to use SPECIFICATION-based queries. A SPECIFICATION allows a client to describe (that is, specify) what it wants without concern for how it will be obtained. In the process, an object that can actually carry out the selection is created...
Un Abrazo
Jorge
From: altnet-a...@googlegroups.com
[mailto:altnet-a...@googlegroups.com] On Behalf Of José F.
Romaniello
Sent: miércoles, 16 de diciembre de 2009 12:24 p.m.
To: altnet-a...@googlegroups.com
Subject: Re: [altnet-argentina] domain o infrastructure?
La gran diferencia entre Dao y Repository esta en la interface. Según Martin Fawler http://martinfowler.com/eaaCatalog/repository.html
No me queda claro como evitar referenciar a NH para manejar las
sesiones/transacciones en Application.