webForumDet fria alternativet

N-tier och NHibernate

.NET

5 svar · 854 visningar · startad av thevice

Medlem sedan dec. 2005198 inlägg
Frågan#1

Hejsan,
Jag hade tänkt att försöka mig på NHibernate till mitt nya projekt som jag håller på med och jag kan ingenting om det så skulle därför behöva lite hjälp. I projektet så har jag nu Entities, DAL och BLL. Jag vet inte om jag har lagt upp allt rätt så att det är så som det ska vara men så här kan det se ut i mitt DAL:

public void DeleteBlogPostByID(int blogPostID, int blogPostOwnerID)
{
	using (IDbCommand objCommand = new MySqlCommand())
	{
		objCommand.CommandText = "sp_DeleteBlogPostByID";
		objCommand.CommandType = CommandType.StoredProcedure;

		objCommand.Parameters.Add(new MySqlParameter("in_BlogPostID", blogPostID));

		int ExecuteNonQuery = new Providers.MySqlDatabaseProvider().ExecuteNoResult(objCommand);
	}

	HttpContext.Current.Cache.Remove("BlogPosts-" + blogPostOwnerID);
}

Sedan i mitt BLL:

public void DeleteBlogPostByID(int blogPostID, int blogPostOwnerID)
{
	BlogDAL blogDAL = new BlogDAL();
	blogDAL.DeleteBlogPostByID(blogPostID, blogPostOwnerID);
}

Det jag nu skulle behöva hjälp med är hur jag ska gå till väga för att använda NHibernate och fortsätta ha ett n-tier. Har sökt som en galning på google men jag har inte hittat något vettigt.

Medlem sedan jan. 20023 327 inlägg
#2

1. NHibernate Best Practices with ASP.NET:
http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx

2. Vidareutveckling (ligger till grund för det i ovanstående länk):
http://devlicio.us/blogs/billy_mccafferty/archive/2008/04/21/asp-net-mvc-best-practices-with-nhibernate-and-spring-net.aspx

Jag rekomenderar dig att först läsa igenom den första artikeln och kanske "labba" med exempelprojekten. Därefter skulle jag gå vidare med den andra länken, som är förbättring/vidareutveckling på den första.

Medlem sedan dec. 2005198 inlägg
#3

Hejsan,
Tack för ditt svar. Jag har nu läst igenom allt och lite börjar klarna. Men jag behöver fortfarande hjälp med hur jag ska bygga upp allt. Jag vill att min arkitektur för projektet ska vara så pass bra som möjligt så att jag kan använda samma till andra projekt.
När jag startade mitt projekt så satt jag och kollade väldigt mycket på hur de hade gjort i blogengine.net och det är på den arkitekturen som jag har byggt allting. Jag bifogar en fil på hur mitt projekt ser ut nu. Jag skulle vilja har hjälp med vad jag ska namnge allting och vart jag ska lägga vart.

Hur skulle ni namnge allting och hur skulle arkitekturen om ni skulle göra om mitt projekt med nhibernate istället?

Untitled-1.jpg
Medlem sedan aug. 20003 575 inlägg
#4

Ta bort prefixet Entities på dina domän objekt.

Jag hade haft ett helt annat upplägg.

Entities
Blog
Entry
....
Services (Domänservicar där business logik som inte passar in i entiteten ligger, arbetar bland annat mot repositories)
BlogService
EntryServuce
.... (man behöver antagligen inte en för varje)
Repositories (Har hand om byggandet av queries, alternativt wrappar in NHibernate i detta fallet)
BlogRepository
EntryRepository

Jag kan tipsa om Onion Architecture som jag gillar beskrivning finns här:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

Medlem sedan dec. 2005198 inlägg
#5

NIckemannen den artikeln du skickade gjorde mig lite klokare men behöver fortfarande hjälp. Jag ska ta steget över till ASP.NET MVC tänkte jag och skulle behöva lite förslag på hur man ska bygga upp sitt projekt där. NHibernate behöver inte finnas med utan jag kan tänka mig att skippa MySQL och gå över till LinqToSQL om det är bättre.
Mata på med information och tipps och länkar är alltid välkomna.

Tack på förhand.

Medlem sedan aug. 20003 575 inlägg
#6

Om du pratar om ASP.NET MVC så är det i detta fallet domänservicarna som skall injecteras in i de controllers där de behövs.

Det finns en bra screencast på hur man kan göra detta på ett riktigt snyggt sätt med Unity,
http://www.pnpguidance.net/Screencast/UnityIoCDependencyInjectionASPNETMVCFrameworkScreencast.aspx

Om dina domänservicar tar emot repositories via konstruktorn så räcker det att du registrerar dem i Unity containern så blir många saker lösta på en gång :D.

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)