Leker lite ddd utan att ha någon som helst kunskaper inom ämnet. HejÄr jag helt ute och cyklar?
Har läst trådar på pellesoft + någon artikel och antagligen bara skrapat på ytan.
Men tänkte leka lite och undrar om jag är på rätt väg eller om jag helt enkelt inte fattat något alls?
<code>
login.aspx.cs
AppUser user = AppUserRepository.LogonUser(sUserName, sPassword);
klass för att hämta objekt ifrån db. Hanterar även inlogging.
public class AppUserRepository : AbstractRepository<AppUser>
{
public override AppUser Load(int cid)
{
string SQL = "select * from tbl_Users where cid = " + cid;
using (DataTable dt = GetData(...);
{
return new AppUserFactory().Create(dt.Rows[0]);
}
return null;
}
public static AppUser LogonUser(string username, string password)
{
//Try to logon user...
//User found...
IRepository<AppUser> ap = RepositoryFactory.GetRepository<AppUser>();
ap.Load(iDefUserCid);
return user;
}
}
public abstract class AbstractRepository<T> : IRepository<T>
{
public virtual T Load(int cid)
{
throw new Exception("The method or operation is not implemented.");
}
}
public interface IRepository<T>
{
T Load(int cid);
}
Klass för att skapa Repository objekt.
public class RepositoryFactory
{
public static IRepository<T> GetRepository<T>()
{
IRepository<T> repository = null;
if (typeof(T) == typeof(AppUser))
{
repository = (IRepository<T>)new AppUserRepository();
}
return repository;
}
}
</code>Sv: Är jag helt ute och cyklar?
Lite fel ute är du... kanske...
User i ditt fall är en entitet i DDD det är rätt.
UserRepository bör nog inte ha logiken som kollar inloggning utan det bör du lägga i en service klass eller kanske to m i infrastrukturen, ex en Membership class.
class Membership
bool ValidateUser(string username, string password)
{
User user = _userRepos.GetUserByLoginName(username);
if(user.password == password)
{
hurra
}
}
Eller så har man en metod som hämtar en användare baserat på både lösen och username, problemet
är om man vill ha hashlösen m.m. tycker inte repositoryn skall ha i uppgift att hantera salt o hashhantering av lösenorden utan logik du lägger i ev en MemberShip klass, eller vad du nu vill namnge den.
En factory för att skapa repositories är heller inte nödvändigt. Om det inte tifför någon nytta tycker jag nästan man har råd att själv skriva FooRepos fooRepos = new FooRepos();
Det är mer om man defautlö vill ha in saker i en repos konstruktor så som connectionstring, transaction eller vad som... då skulle en factory kunna vara trevligt för att slippa skriva denna kod själv varje gång man vill ha en repository.
Mvh JohanSv:Är jag helt ute och cyklar?
Då varje användare har olika lands inställningar skapade jag även repository klass för detta.
Och eftersom jag läser upp alla land i en cach tänkte jag använda en service klass då jag hämtar denna datan.
ÄR det en ok anledning att använda en service klass?
<code>
public class AppCultureRepository : AbstractRepository<AppCulture>
{
public override AppCulture Load(ISpecification spec)
{
return new AppCultureFactory().Create(AppCulturService.GetCulture(spec.Cid));
}
}
public class AppCulturService
{
public static void LoadAppCultureCache()
{
//Load cache
}
public static DataRow GetCulture(int cid)
{
//return row from cache.
}
}
</code>