Traditional Repositories Vs Single UnitOfWork

Aug 17, 2010

I would like to start a debate on traditional repositories versus one built on the UnitOfWork pattern. In a traditional repository, we wrap inserts, updates and deletes in a transaction, but selects don't really need them. In addition, nhibernate configuration is typically done once per application due to BuildSessionFactory being rather expensive. We often have several repositories of this type (one per aggregate chain). We also need to have projected, ahead of time, exactly what kinds of queries we'll need in order to build the interfaces and concretes correctly. In a single UnitOfWork repository we have the ability to manage both the current session and transaction, perform several operations, and then commit any changes all at once. In such a repository we may opt to put our configuration in the constructor since (typically speaking) no more than one Action is called per request anyway, initializing it in the application doesn't seem like much of an overall gain in speed. I must admit, I'm very temped to use the UnitOfWork pattern, as the following code looks really nice to me:

Csharp Code:
using (IUnitOfWork worker = new UnitOfWork()){// session and transaction are now both set
// save changes to three itemsworker.SaveOrUpdate(item1);worker.SaveOrUpdate(item2);worker.SaveOrUpdate(item3);
// grab a fourth var item4 = worker.Criteria<Foo>().Add(Expression.Eq("title", title)).UniqueResult<Foo>();
// delete the fourthworker.Delete(item4);
// all pending operations are commited or rolled back as a single unit (if one fails, all are rolled back), and then disposed, along with the session}

My proposed UnitOfWork class is rather simple. It implements IDisposable where I use a try-catch-finally in Dispose() to attempt a tx.Commit(), doing a tx.Rollback on failure, and a cleaning everything up in the finally clause. It also exposes common things like SaveOrUpdate, Delete, GetAll, Get, and even a Critera<T>() for custom on-the-spot queries. So what are your thoughts on this? I'd really like to hear about your experience with this pattern.

View 4 Replies


Similar Messages:

Single Repository Or Multiple Repositories?

May 1, 2010

In a typical business application, a session is started and persisted across several pages. It is commited only when the transaction is complete. A good example of this is a tax preparation application. Once the session is started, it is persisted through session, cookies, or both. Nothing is written to file, or database, until the entire profile is complete and the refund/return is calculated. In such an ennvironment, is makes a great deal of sense to work with the structure imposed by domain driven design, and using a single repository to simple commit the session. However, there are times when this doesn't translate correctly, even when domain driven design is used.

An example of this is my forum project. While the entities themselves are good targets for domain driven design, I am not sure about the repositories. The basic structure is that a Category has many Forums, a Forum has many Threads, and a Thread has many posts. There are other things in there, but that's enough to describe what I want to get across. If a user has navigated to /Thread/Edit/42, and they have rights to edit it, all I am concerned about is fetching that record and displaying it. On postback, all I want is to be able to save it..................

View 2 Replies

Architecture :: Interaction Between UnitOfWork And Repository Patterns?

May 31, 2010

I read some article about unitOfwork and repository but i'm still confused about how they interact, and how to use them in the right way.

I'm using an addressbook project to practise on patterns (even if , likely, patterns are not usefull) without any ORM framework for persistence.

My domain objects are (at now) : AddressBook (acts as an application controller), Contact (contains information about each contact in the address book), ContactGroup (mantain collections of contact).

Should i have to use distinct repository object for contact ad contactgroup?

I thought to use a UnitOfWork for the operation about the adding/removing contact to group : the user can add existing contact to a group, create a new contact while adding it to the group or remove contact from group.

View 1 Replies

Can XVal Be Used For Traditional Web Forms Model

Feb 10, 2010

It appears that xVal fits more into a MVC model. Can it be used for traditional Web forms model?

I am currently considering MS Validation block and .NET validation framework. What other validation frameworks can I look into?

View 1 Replies

MVC :: Sharing Same Master Page For Traditional Project

Feb 4, 2010

We have two projects. One is in MVC and the other is the traditional Asp.Net project. We are trying to share a common Master Page for both the projects. The Master page for the MVC project is already using a form tag with runat="server" attribute because it's using a traditional ASP.Net control for the navigation menu. The ContentPlaceHolder is outside this form.

UPDATE:
Found the answer here:
[URL]
<form
id="Form1"
runat="server">
.......
<asp:ContentPlaceHolder
ID="MainContent"
runat="server" />
</form>

View 2 Replies

MVC :: Transferring Home Page Rank From A Traditional HTML To An Mvc Website?

Jun 20, 2010

i have been recently requested from a client to upgrade his static html web site (hosted from another provider) to a new asp.net mvc web application (hosted from my provider). The current home page rank is 3/10 and i woul not like to lose it ehwn transferring the hosting DNS to another hosting provider company.

Is it possible to keep the home page rank? I am realy not interested in all the other pages.

Also, my home page can be accessed via [URL] disadvantage when comes to SEO?

View 5 Replies

MVC :: Does [HandleError] Attribute In MVC Replaces The Traditional Try Catch Exception Handling

Feb 3, 2010

Does [HandleError] attribute in MVC replaces the traditional try catch exception handling?

As I have seen codes in controllers where the top line of code is [HandleError] also I have not seen much of try catch in the code of the application I am working on.

View 2 Replies

WCF / ASMX :: How To Secure A WCF Web Service / Using Traditional "connection String In Web.configâ€

Aug 2, 2010

How do you secure a WCF web service when you are using the traditional "connection string in the web.config"?

I have added a WCF service to an application which uses a JQuery post and returns JSON. The request happens on the client side. The purpose of this service is to return search information while the person is typing text into a textbox.

It works well, but there is a problem because the application will be used by a number of people and I am maintaining a role based security within the applications MS SQL database. The connection string to the database is in the web.config file.

In order to run the JQuery call to the web service the user must have at least read access directly to the database. I want to allow the application to control the access, but removing all security to the WCF service opens the application up for external access by unauthorized users.

View 3 Replies

MVC :: Are Repositories Automatically Disposed Of In C#?

Dec 6, 2010

Could someone explain what happens to the Repositories that are created when they are no longer needed? Are they automatically disposed of, or should we dispose of them manually?

Using EF4 as the DAL, to keep the program efficient I have been building repositories for the Model that abstract the data needed for specific views or actions. I have also used the Iinterface for the methods and call them in the Controller to pass them to the View. At some point the program needs to pass a behavior or request that requires the creation of a new repository and the process may repeat itself over and over again. What happens to the repositories that created for previous views, but are no longer needed? Should the dispose be written into each repository, or does garbage collection take care of this? How should this handled?

View 6 Replies

.net - Architecture With NHibernate And Repositories?

Apr 13, 2010

I've been reading up on MVC 2 and the recommended patterns, so far I've come to the conclusion (amongst much hair pulling and total confusion) that:

Model - Is just a basic data container Repository - Provides data access Service - Provides business logic and acts as an API to the Controller

The Controller talks to the Service, the Service talks to the Repository and Model. So for example, if I wanted to display a blog post page with its comments, I might do:

post = PostService.Get(id);
comments = PostService.GetComments(post); Or, would I do:

post = PostService.Get(id);
comments = post.Comments;

If so, where is this being set, from the repository? the problem there being its not lazy loaded.. that's not a huge problem but then say I wanted to list 10 posts with the first 2 comments for each, id have to load the posts then loop and load the comments which becomes messy.All of the example's use "InMemory" repository's for testing and say that including db stuff would be out of scope. But this leaves me with many blanks, so for a start can anyone comment on the above?

View 1 Replies

C# - Are Repositories Useful Without Domain Driven Design?

Mar 9, 2011

Assuming my application did not warrant a full blown DDD setup, would Repositories still be useful? I like the way they shield from implementation details (such as use of Entity Framework) underneath. However Repositories tend to be tied to Aggregate Roots (the concept is still a holy grail to me) by definition.

I suppose the question could also be put as such: if I have a typical 3-tier application, with a business layer facade consisting of "logical grouping" classes based on functionality (rather than aggregate roots as in DDD) such as TradingManager and ContactsManager, would it make sense to also create "logical grouping" repositories. Or perhaps a Data Access Object, which I believe is like a Repository without the aggregate root requirement. Of course I will still have a Model (EF POCOs) that will be passed up and down between the layers.

Also, is what I just described would be considered as a Transaction Script approach? It's certainly not DDD, and not Active Record. I'm not even sure if Active Record exists with EF4 like it does with Nhibernate.

I am trying to understand how others structure n-layered applications when they do not follow DDD.

View 2 Replies

MVC :: Using EF4 Complex Types / Properties In Repositories?

Jan 13, 2011

Are there advantages in creating complex types in EF4 Entities and then use the complex properties in the repositories; instead of creating the aggregates in the the repository themselves? I.e. If the customer repository consists of properties of 3 entities: customers, addresses, email would it make sense to create a complex type consisting of the address and email properties, and add them as a complex property of the customer entity then just call the customer entity and the complex property in the repository, rather than just creating the repository class and aggregate the entities in the repository.What are there advantages or disadvantages in doing this in a MVC3 application?

View 10 Replies

MVC :: Multiple Repositories And Save DB Function

May 3, 2010

I have a few repositories in my project. All repositories inherit from an abstract interface repository containing the public datacontext variable and a Save function for the entire DB.

In my controllers I want to make changes to the the db and in one of my functions I'm working with two different repositories. Calling the Save function on each of the repositories I'm using can cause a situation in which one of the calls to Save succeeds and and the other fails resulting in a need of rolling back the changes of the Save function that failed.

What is the best way to work against multiple repositories and access to the DB to avoid such a situation?

View 7 Replies

DataSource Controls :: SubmitChanges In Controller (mvc) Using Repositories (linq2sql)?

Jul 7, 2010

I'm got 2 model objects. Category and CategoryItem. I try to add a CategoryItem to Category in my Controller but It wont save to database, and I know why because I don't know how to call the submitChanges on the add while using repository, I dont got the DBContext right there is you know what I mean?.. here I will show you with code.

[Code]....

View 4 Replies

C# - .net Development Code Structure -Controllers, Services, Repositories & Contexts?

Dec 11, 2010

As a new developer I'm getting thoroughly confused by naming and structural conventions for developing c# code using best practice.I appreciate it's perhaps applicable to each domain I am developing for but I've seen the code of many different open source projects and there seems to be a common theme. The successful projects have well thought out structure for maintenance and extensibility.The terms context, service, repository and controllers are used often and I wondered if these are open to interpretation or is there a consensus or convention on what, where or how these get used.

In an e-commerce platform I've seen there are order services, order contexts, customer repositories and product controllers for example. What should they do based on these names? Does a controller do something different to a service? When should you use a context? Is there a convention for namespaces? It's mind boggling when you try and push from a spoon fed newbie developer and try to move on.What software/tools should I really be looking at to develop quality code? Unit Testing, Continous Integration, Resharper, Mocking tools, DOI Containers, nHibernate.

I'm not really aware of blogs/books that will help me push on from being a proficient web developer into someone who can develop extensible, quality and testable code. There are big gaps in authors assumptions. You are either a newbie or a software architect. I want to push from being a junior developer with a long term aim of being a software architect. I realise it's all about patterns and practices but where are the training materials? I work on my own so don't have the opportunity of learning from others.

View 2 Replies

C# - Getting A Online Repositories And Project Management Tool For A Project?

Feb 16, 2010

Our team doing a project in asp.net & Mssql 2005.since our team member are distributed. we need a online tool for tracking project changes, and control access to our online code repositories.

[code]....

View 4 Replies

Forms Data Controls :: Using Multiple Tables Within A Single DataSet And Single SqlDataSource?

May 19, 2010

I have a stored procedure that returns 3 tables within the single recordset it returns. If I set a SqlDataSource to get data from this procedure, it works, but it only returns the first table. I want to have a GridView display the data from the 2nd or 3rd table using a SqlDataSource, but I can't figure out how to specify a particular table.

While there are some posts discussing this out there, I can't get a definitive answer about whether or not this is even possible (?). In a worst-case scenario, I can create another SP that only returns the 3rd table - but that creates a little maintenance headache that I would prefer to avoid.

View 4 Replies

DataSource Controls :: Using LINQ To Pull Out A Single Value From A Single Result Row Of A Join Query?

May 25, 2010

For context: First of all, I am new to LINQ, as I have been using SubSonic for quite some time now.

I have two tables, Users, and Affiliates. They both have a very typical schema. The FK that joins them is the UserId field, which is in the Affiliates table. I want to create a LINQ query that pulls the Username from the Users table using the AffiliateId value. The AffiliateId is a primary key of the Affiliates table.

I have tried to accomplish this using many variations of the following code:

[Code]....

In the above query, I expect to get a single row result set. However, I instead receive the entire table of results.

How can I make this work? I have yet to see an example or article out there to do what I am trying to do.

View 9 Replies

Open A Single Worksheet (single Tab) From A Huge Excel File On A Web Browser Using C#

Feb 27, 2010

I have huge excel files that I have to open from web browser. It takes several minutes to load huge file. Is it possible to open a single worksheet (single tab) at a time from excel file that contains many worksheets? I have to do this using C# / asp.net MVC

View 5 Replies

Web Forms :: Disable A Single Intem In Dropdownlist Or Stop The Ddl Change Event For A Single Item?

Sep 20, 2010

I am trying something apart of my boundries, is there any way to disable a single intem in dropdownlist or stop the ddl change event for a single item.

View 2 Replies

Multiple Single-result Sql Server Stored Procedures Or Single Multple-result Stored Procedure?

Aug 9, 2010

Background: I use stored procedures exclusively for an ASP.NET application. I am using a DataReader to load a dataset object.

View 4 Replies

How To Get A Single Row (SQL)

Aug 10, 2010

is it possible to get a single row in ASP.NET?i always used dataList but this destroys my design with the item template, i need somethink that has no template only the Eval() statements

View 3 Replies

IP Whitelist For A Single URL In IIS?

Aug 1, 2010

I have an ASP.NET application that's made up of several .aspx pages. I want one of those .aspx pages to be accessible by only a certain set of IPs. Is this possible?I know you can IP whitelist at the website level, but can you IP whitelist for a single URL in an application?

View 3 Replies

Web Forms :: How To Get The A Single Constant Value

Feb 26, 2010

I have a function that calculates the exchange rate between two currencies. The inputs are constants:

[Code]....

I have currency codes in my database listed as "EUR", "USD" etc. that I want to use in the function. Unfortunately the function requires a constant value like CurrencyExchangeRate.Currency.EUR instead of a string value called "EUR" How can I turn the value from the database into a usable value for the function?

I know it must be very simple but I cannot figure it out.

View 9 Replies

Register A Single Controller?

Aug 7, 2010

The code below works for adding all controllers:

container.Register(AllTypes.Of<Controller>().FromAssembly(typeof(MvcApplication).Assembly).Configure(c => c.LifeStyle.Transient.Named(c.Implementation.Name.ToLower())));

But I want to add them one at a time. Nothing I try works (example below). How do I code this?

container.Register(Component.For<CategoryController>().LifeStyle.PerWebRequest);

View 2 Replies







Copyrights 2005-15 www.BigResource.com, All rights reserved