Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm General / December 2006

Tip: Looking for answers? Try searching our database.

Static vs Non Static DAL Class(es)

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Fred Mertz - 26 Dec 2006 18:48 GMT
I'm wondering what some of the important considerations are regarding
implementing the DAL as a static class vs creating instances of it as
needed.

I'm writing a .NET 2.0 Windows application (MDI) that will communicate with
a SQL Server; approximately 120 users.

On smaller apps I have tended to implement the DAL as a static class. But
this new app will likely spawn background threads periodically to update
business objects throughout the session. All such threads (likely not more
than one or two at a time) would make use of the DAL.

This is my first foray into multi-threaded apps - so I'm wanting to proceed
with caution and guidance. So any relevant would be appreciated!
Ignacio Machin ( .NET/ C# MVP ) - 26 Dec 2006 19:07 GMT
Hi,

I don't know how u plan to implement your DAL but as long as they are
stateless (most probably they are already) you should have no problem with
concurrency.

Signature

Ignacio Machin
machin AT laceupsolutions com

> I'm wondering what some of the important considerations are regarding
> implementing the DAL as a static class vs creating instances of it as
[quoted text clipped - 10 lines]
> This is my first foray into multi-threaded apps - so I'm wanting to
> proceed with caution and guidance. So any relevant would be appreciated!
Dave Sexton - 26 Dec 2006 19:18 GMT
Hi Fred,

When using static methods with asynchronous processes you'll have to be sure
that they are thread-safe.  If the methods in your static classes don't rely
on any shared state then you won't have to worry about thread-safety in
managed code, at least.

Using instances of your DAL entities is more OO though, and therefore more
flexible.  You'll probably be better off using instances instead regardless
of whether thread-safety is an issue.  Objects will allow you to handle
entity relationships easily, and if you ever need to expand into a more
robust design pattern then you'll probably need instances of your entities
anyway (to facilitate the polymorphic techniques used by design patterns).
Static classes would just end up being a bottleneck in the development
process.

Signature

Dave Sexton
http://davesexton.com/blog

> I'm wondering what some of the important considerations are regarding
> implementing the DAL as a static class vs creating instances of it as
[quoted text clipped - 10 lines]
> This is my first foray into multi-threaded apps - so I'm wanting to
> proceed with caution and guidance. So any relevant would be appreciated!
sloan - 26 Dec 2006 19:49 GMT
One reason I use non static is

A: Constructor
B.  I inherit from an abstract class.

class DataLayerAbstract
{
   public DataLayerAbstract()

   public DataLayerAbstract(string instanceName)

}

class EmployeeData : DataLayerAbstract
{
   public EmployeeData : base ()

   public EmployeeData (string instanceName) : base (instanceName)

}

class DepartmentData : DataLayerAbstract
{
   public DepartmentData : base ()

   public DepartmentData (string instanceName) : base (instanceName)

}

Something like that.  I have a few different ways I could instantiate the
object (mainly, from where do I get the connection string info).

Then I only write that code once, in the abstract class.

...........

If I ever have a need, where I might use Access or SqlServer, then I can do
something like this:

class DataLayerAbstract
{
   public DataLayerAbstract()

   public DataLayerAbstract(string instanceName)

   public override DataSet GetAllEmployees();

}

class EmployeeDataWithAccess : DataLayerAbstract
{
   public EmployeeData : base ()

   public EmployeeData (string instanceName) : base (instanceName)

   public override DataSet GetAllEmployees()
{
       //return a DataSet of employees via Access
}

}

class EmployeeDataWithSqlServer : DataLayerAbstract
{
   public EmployeeData : base ()

   public EmployeeData (string instanceName) : base (instanceName)

   public override DataSet GetAllEmployees()
{
       //return a DataSet of employees via Sql Server
}

}

Then I can write my code to work with the abstract class, and then create a
factory class to return either the sql server or access version.

pubic class MyDatabaseFactory
{
   private MyDatabaseFactory ()
{}//hide the contructor

public static DataLayerAbstract GetADataLayerObject()
{
       bool isAccess = true;// config file? etc?

     if (isAccess)
{
       return new EmployeeDataWithAccess ();
}
else
{
       return new EmployeeDataWithSqlServer ();
}
}
}

Forgive my syntax errors, but hopefully you get the idea.

I would use the "data access application block" 2.0 if you're using sql
server ... to ~~~help with and aid your DataLayer object(s).
If you have needs beyond Sql Server, then check the EnterpriseLibrary.Data
library.
This will do housekeeping for you on almost everything, except properly
closing an IDataReader.  You ~~always need to close the IDataReader
yourself, as soon as possible.

I'm not sure if you're creating a helper DAL object OR  DAL objects per
entity (as in, EmployeeData, DeptData, stuff like that)

Those are some reasons, each situation is different.

> I'm wondering what some of the important considerations are regarding
> implementing the DAL as a static class vs creating instances of it as
[quoted text clipped - 10 lines]
> This is my first foray into multi-threaded apps - so I'm wanting to proceed
> with caution and guidance. So any relevant would be appreciated!
Sir C4 - 27 Dec 2006 08:38 GMT
Instead of re-inventing the wheel....Have you thought about using a
time-tested DAL...  I would HIGHLY recommend LLBLGenPro
(http://llblgen.com) as the main developer is a MASTER when it comes to
DAL, and the support along with the number of people actually using it
in real world application makes it a very stable product.  I was using
DeKlarit, but found it difficult to use once a project got soo big.  I
since found LLBLGenPro and can't say enough about it.

> I'm wondering what some of the important considerations are regarding
> implementing the DAL as a static class vs creating instances of it as
[quoted text clipped - 10 lines]
> This is my first foray into multi-threaded apps - so I'm wanting to proceed
> with caution and guidance. So any relevant would be appreciated!

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.