Most of the above is solid advice. I agree that if you plan to invest time to create an N-Tier application, you should consider looking for an ORM solution. If you're building .NET technologies, EF4 is a very good approach to creating DALs.
, DAL/BLL. DataSets .NET 3 4, . DAL . List<T> or IQueryable<T>. IQueryable - , , BLL DAL.
, . (, CustomerRepository, EmployeeRepository) , .
, :
Repository<TEntity> : IRepository<TEntity> where TEntity : ITrackable
DAL, nCommon.
Entity Framework POCOs:
http://blog.tonysneed.com/2010/02/19/trackable-dtos-taking-n-tier-a-step-further-with-ef4/
, DAL , .
. . , sqldatareaders. , EF4 N-Layer, .
[EDIT]
, , .
, . , , . , : , , , , .
. Malcolm Gladwell Outliers , - 10 000 . .:)
, , - Head First - Design Patterns. OOD , . , : " , , , !" , ; , . ( ).
, , , . , , ... .NET. , , . , , .
, Microsoft . - .
Entity Framework EF4. ORM - "" , -. , , :
SqlDataReader
"SELECT * FROM Users WHERE Users.UserId = 1"
ORM SQL. ORM , . - :
User user = EFContext.Users.Where(u => u.UserId == 1).SingleOrDefault();
ORM SQL . ORM (MSSQL, Oracle, MySql) .
, ORM BLL. , :
using (var repository = new Repository<User>())
{
User user = repository.Where(u => u.UserId == 1).SingleOrDefault();
}
ORM . : , ( , - ) , .
, .
[ 2]
, , . :
, ORM, List<T>, IQueryable<T>, T . , Entity POCO. POCO - , , . . .
, -, , , List<T>, BindingList<T>, , DTO .
DTO , . DTO . :
[DataContract]
public sealed class UserSummary : IDto
{
[DataMember]
public String FirstName { get; private set; }
[DataMember]
public String LastName { get; private set; }
[DataMember]
public UserProfile Profile { get; private set; }
public UserSummary(String firstName, String lastName, UserProfile profile)
{
FirstName = firstName;
LastName = lastName;
Profile = profile;
}
}
. POCOs , : AutoMapper. POCO, , .
. DTO -. , , , .
, , List<IDto>, ValidationResults Microsoft , .
, . NLayer, , . , . .