Avatar billede mysitesolution Nybegynder
22. marts 2008 - 17:45 Der er 12 kommentarer og
2 løsninger

Udelukkende brug af stored procedures

Hej...

Er ved at programmere en side der benytter asp.net 3.5, c# 3.0 og ms sql. Jeg benytter LINQ. Min idé er at udelukkende benytte stored procedures, til ALT! For og imod på den? Og jeg vil foretage validering af data i disse stored procedures, i stedet for på asp.net siden. Dog vil der OGSÅ være validering i asp.net siden. Igen, for og imod på den?

Og hvordan skal jeg benytte exceptions osv.? altså som normalt med at jeg i den stored procedure smider en custom exception hvis validering er gået galt, eller skal jeg lave en output parameter? Har hørt det med exceptions er for langsomt?
Avatar billede erikjacobsen Ekspert
22. marts 2008 - 17:50 #1
Du vil i givet fald blande noget GUI-noget (validering), forretningsregler, og persistens/SQL sammen i disse SP-ere. Er det ok ?

Jeg ville ikke gøre det, for der mistes modularitet og overskuelighed. Og det vil være en udfording at lave automatiske test-scripts (unit-tests). Og hvordan lige med dokumentation, hvor der dog findes god værktøjer til .NET-verdenen.

Og hvad skulle dit formål egentlig være?
Avatar billede arne_v Ekspert
22. marts 2008 - 22:37 #2
Brug af SP:
  pro - god performance, DBA'en er normalt meget bedre til SQL end developer
  con - meget dyrt at portere til en anden database, koden bliver ofte noget rodet fordi SP og OOP ikke matcher

Brug af validering i app:
  nødvendig for at give gode fejlbeskeder

Exception performance:
  ikke noget problem (exceptions er jo netop det)
Avatar billede 2c Nybegynder
22. marts 2008 - 23:01 #3
Det kommer også lidt an på om du er web mand eller database mand.
Gennerelt vil jeg fraråde at brue SP til alt af 2 grunde:
Database programering er i forvejen utroligt simpelt med LINQ, så på den konto vinder du alligevel ikke noget med SP.
Det gør koden uoverskuelig, da du får den 2 steder. Både i databasen og på websiden.

Ellers så jeg lige denne video (http://www.asp.net/learn/sql-videos/video-114.aspx) på asp.net for noget tid siden om SP. Det er en tutorial til SP, men den vender også for og imod SP i webapplikationer. Den er dog lidt lang, men se den hvis du har lyst :-)
Avatar billede mysitesolution Nybegynder
22. marts 2008 - 23:14 #4
Hhm.. altså med hensyn til overskuelighed.

Kan vidst godt være det er mere overskueligt med fx SELECT linq statements i koden end det er at skrive fx "db.GetOrders();" da man så kan se udfra koden om det fx er sorteret eller ikke er. Men vil nu stå fast på, at det er 100 gange mere overskueligt at skrive "db.CreateSomething();" som knalder 100 INSERTs af, end det er at indsætte dem i koden. Fordi der er linq ikke for overskuelig. Kunne være jeg skulle lave mig en mix så.

Men vil meget gerne have validering det sidste sted, nemlig i databasen, da det på den måde, så bliver umuligt at lave en fatal fejl i koden. Hvis bare de stored procedures er programmeret ordentligt vil det være sikkert.

Kan også se en sikkerhedsmæssig fordel ved at bruge sprocs, som jo er, at man kan blokere for alt andet end sprocs, så man ikke kan lave noget som der ikke er en ordentlig hensigt med.

Ville det være en idé at lave insert og updates med sprocs, og så lave select statements med linq? Og er det muligt, så at kun tillade "select" og sprocs i databasen?

Vil det være overkill at lave validering både på databasen og på siden? Vil det være for krævende at fyrer nogle regexp af hver gang der fx indsættes noget?
Avatar billede arne_v Ekspert
23. marts 2008 - 04:56 #5
Det kan normalt ikke anbefales at bruge to forskellige persisterings mekanismer parallelt.

Det giver problemer med caching og med transactions.
Avatar billede mysitesolution Nybegynder
23. marts 2008 - 13:35 #6
filmen som 2c linker til, siger da netop at man skal benytte dem begge?
Avatar billede arne_v Ekspert
23. marts 2008 - 16:48 #7
Nu har jeg ikke set filmen.

Men:
- kald af INSERT/UPDATE/DELETE/SELECT og kald af stored procedures via SqlCommand kan
  godt blandes da det reelt er samme persisterings framework - det er ikke super
  godt fordi det kræver at det er samme person som laver både kode og stored
  procedures for at undgå ups'ere og så ryger lidt af fordelen ved stored procedures -
  eller hvis vi skal bruge et fint ord: applikationen og stored procedures bliver
  for tightly coupled
- taler vi om to helt adskilte persisterings framework (rå SqlCommand, DataSet,
  LINQ for SQL, NHibernate, LLBLGen etc.), så må det være åbenlyst at der er
  problemer med cache og transaction fordi hele pointen i de mere avancerede af
  disse er at de skjuler den slags og derfor kan det være meget svært at koordinere
  med noget andet
Avatar billede mysitesolution Nybegynder
23. marts 2008 - 17:00 #8
hvorfor skulle vi tale om forskellige frameworks?

LINQ for SQL klarer jo både select statements og sprocs... Der bliver genereret en klasse hvor man kan gøre flg:

Database db = new MyDB();

var query = from product in db.Products select product;  //Select

db.InsertProduct("Is"); //Sprocs


eller har jeg misforstået hvad du mener?
Avatar billede arne_v Ekspert
23. marts 2008 - 23:08 #9
Jeg læste din 23:14:12 kommentar som at du ikke ville bruge LINQ til insert og update.
Avatar billede mysitesolution Nybegynder
24. marts 2008 - 15:45 #10
ja kan godt se det var lidt tvetydigt... men anyway, mener at jeg vil bruge "var query = from select" til select, og så vil jeg bruge sprocs til insert og update, som "db.UpdateProduct()" osv. istedet for "db.InsertOnSubmit();" osv.
Avatar billede mysitesolution Nybegynder
26. marts 2008 - 21:40 #11
Skal bruge nogle svar fra jer - det er vidst besvaret
Avatar billede arne_v Ekspert
26. marts 2008 - 21:43 #12
ok
Avatar billede 2c Nybegynder
26. marts 2008 - 21:45 #13
ok
Avatar billede erikjacobsen Ekspert
26. marts 2008 - 22:05 #14
Nej tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester