Belvasis,have a look to the video at the bottom of the post
http://jfromaniello.blogspot.com/2009/08/nhibernate-and-wpf-viewmodels-and-views.html


2009/8/23 Belvasis <[email protected]>

> Hm i tried to write a winform framework (mostly) independend of NH. My
> attemp was that the hole session thing
> is transparent for the developer, so that all one has to know about NH is
> the ICriteria interface. So i have
> a IPersistenceService that is resolved by IoC. The Service has a method
> OpenSession wich returns an
> IPersistenceSession (no NH Session). The IPersistenceSession holds an
> IPersistenceContext wich in case
> of NH usage manages the ISession for the IPersistenceSession. So every
> UseCase works with such a
> IPersistenceSession and resolves IRepository<T> instances from it. Every
> IRepository<T> instance is valid
> only within this IPersistenceSession/IPersistenceContext. If one resolves
> an IRepository<T> directly from
> the IoC container, it uses it's owen independend IPersistenceSession.
> The Winform stuff is build like MVC. The views are simply usercontrols
> implementing an IContentView interface.
> Views are managed by the controller wich is a IUseCase instance and live in
> a main ContenView ( IWorkbench).
> The Workbench provides the CallingContext to the IUseCase. The IUseCase
> builds an ExecutionContext from
> this CallingContext or retrieves one if it is called by another IUseCase.
> The ExecutionContext simply contains
> a IWorkbench reference and a reference to the calling IUseCase. Since the
> IUseCase has also a reference
> to an IPersistenceSession it can simply be used by child UseCase's. The
> workbench itself is build from an
> IUseCaseSchema wich contains a tree of IUseCaseItems where every item may
> reference a IUseCaseDefinition.
> The IUseCaseDefinition can be used to build and execute the IUseCase, wich
> is done by the IUseCaseRepository,
> since there is some proxy stuff involved to manage permission and other
> dependencies.
> So in the end it looks like this:
>
> IWorkbench
>    ---> IUseCaseSchema
>       ---> IUseCaseItem
>          ---> Button/Treenode, Menue etc.
>           ---> Click (:-))
>            --->
> IUseCaseRepository.doBuildUseCase(Definition,CallingContext)
>              ---> IUseCase.doExecute
>                ---> IPersistenceService.OpenSession
>                  ---> do things...or
>                    ---> create IContentView
>                      ---> ContentView.PersistenceSession =
> IUseCase.PersistenceSession
>                        ---> IWorkbench.doAddView(ContentView)
>                          ---> ContentView...Button...is again an
> IUseCaseItem with IUseCaseDefinition... Click...
>                           ---> IUseCase.doExecuteChildUseCase(Definition,
> ExecutionContext)...ExecutionContext.Entity = Currently selected entity
>                             ---> this.PersistenceSession =
> ExecutionContext.PersistenceSession
>                               ---> work with the ExecutionContext.Entity
>                            - OR -
>                             ---> this.PersistenceSession =
> IPersistenceService.OpenSession
>                               ---> reload the Entity within the newly
> created IPersistenceSession
>                                   (
> IPersistenceSession.getRepository<T>().getObject(
> ExecutionContext.Entity.ID)
>                             ---> do soemthing usefull
>                           ---> close
> view....IWorkbench.doRemoveView(ContentView)
>                           ---> IUseCase.doStop
>           ---> Click another Item
>             ---> IUseCase.doPause
>             ---> build and execute another IUseCase
>
> So i don't know if this is all a little naive and therefore i didn't post
> anything about it. It works well, but i will
> rethink the pattern from Fabio if or how it fits in all this. I'm just a
> little carefully :-)
>
> 2009/8/23 Jim Tanner <[email protected]>
>
>
>> @Tuna : I don't find any mention of winform around caliburn but i may
>> be mistaken. Are u sure they mix well before i digg further ?
>>
>> @Carlos : By any chance did u try the winform sample inside NhContrib
>> (not unhaddins)? Do u remember getting it work or was it broken ?
>>
>> @ChrisHolmes and Belvasis : Are you writting / have you written a
> winform nh framework from scratch or can u point me to an existing
> framework ?
>
>>
>> @Every one who might be interrested : This article deals with a way to
>> handle lazy loading in winforms.
>> http://www.codeproject.com/KB/cs/NHibernateLazyInitializer.aspx
>>
>>
>>
>> On 23 août, 18:13, Carlos cubas <[email protected]> wrote:
>> > I think foremost, you should tone down your demanding attitude.
>> Everybody is willing to help you just not with you demanding such attention.
>> >
>> > Again, you should really take a close look at the unhaddins impl, run
>> the samples, etc.  I was in the same boat as you some time ago.  And managed
>> to figure it out.  It can't be that hard can it?
>> >
>> > -Carlos
>> >
>> > Practice makes perfect, but if no one is perfect, why practice?
>> >
>> > > Date: Sun, 23 Aug 2009 08:50:34 -0700
>> > > Subject: [nhusers] Re: How to handle Session in WinForm project?
>> > > From: [email protected]
>> > > To: [email protected]
>> >
>> > > > If you are all new to this, don't try to invent everything from
>> > > > scratch in your first application. Either use the patterns and
>> > > > libraries already mentioned or, if you want to really understand and
>> > > > develop everything yourself, start simple.
>> >
>> > > Yes! Because understanding is the most important thing! I am not going
>> > > to just grab other people's bits and implementations without
>> > > understanding them and start using them. That is not how I grow as a
>> > > developer. I have to understand it. And that means I need information,
>> > > and details. I need more information.
>> >
>> > > > A rather simple approach
>> > > > may be to define a service layer (e.g. just a single static class)
>> > > > that has a public API derived from use cases
>> >
>> > > "derived from use cases " - That's the first thing I've read that
>> > > makes sense. Thank you.
>> >
>> > > >  and only in this layer
>> > > > ISession objects and a session factory is allowed. Then in each
>> public
>> > > > method a fresh session is opened, data fetched, maybe some kind of
>> > > > post-processing/conversion/transformation is done, and before
>> > > > returning the result the session will be closed. This is the basic
>> > > > idea of session per business transaction (or per use case).
>> >
>> > > > For applications that are not too complex this might suffice, in
>> more
>> > > > complex scenarios patterns like the mentioned persistence context
>> > > > might be needed.
>> >
>> > > > Hope, this helps a little bit.
>> >
>> > > A little bit. Thank you Stefan!
>> >
>> > > -Chris
>>
>>
>
> >
>


-- 
Fabio Maulo

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to