WireFrame.ASP

  1. °³¿ä
  2. Controller
  3. BaseSqlModel
  4. Scaffold
°³¿ä
WireFrame.ASP ¶õ?
Classic ASP ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â, MVC Pattern ÀÇ À¯»ç ±¸Çö(¼³¸íÀÌ ´Ù¼Ò ¸ðÈ£ÇÑ °ÍÀº, ±¸Çöµµ ´Ù¼Ò ¸ðÈ£ÇØ¼­ÀÔ´Ï´Ù)ÀÔ´Ï´Ù
ÀúÀÇ °³ÀÎÀûÀÎ ÄÚµù½À°üÀÌ ¹Ý¿µµÇ¾î Àִµ¥´Ù ÆÛÆ÷¸Õ½ºµµ ¾È ÁÁÀº Å¿¿¡, ÀϹÝÀûÀÎ À¥¼­ºñ½º °³¹ß Àû¿ë¿¡´Â ½ÉÈ÷ ¹«¸®°¡ ÀÖ°í, WireFrame À̶ó´Â À̸§ÀÌ ¸»ÇØÁÖµí, ½ÇÁ¦ ºñÁî´Ï½º ·ÎÁ÷ÀÇ ±¸Çö¿¡ µé¾î°¡±â Àü, °£´ÜÇÑ Prototype Á¦ÀÛÀÌ ÁÖ ¿ëµµÀÔ´Ï´Ù¸¸...
±×¸¶Àú °£´ÜÇÏ´Ù Çϱ⿣ Á»...
Ư¡
Controller, Model, View °¡ ÀÖ½À´Ï´Ù
¾à°£ÀÇ Æ®¸¯À¸·Î ASP ¿¡¼­ Pretty UrlÀ» ±¸ÇöÇÕ´Ï´Ù
DataBase ÀÇ Table °ú 1:1 ·Î ¸ÅĪÇÏ´Â Model µéÀ» ¼Õ½±°Ô ±¸ÇöÇÕ´Ï´Ù
¹«·Á ÀÚü °³¹ß(ÀÌ¶ó ¾²°í '»ðÁú'À̶ó Àд´Ù)ÇÑ js ±â¹Ý ÅÛÇø´ ¿£ÁøÀÌ ÀÖ½À´Ï´Ù
±×·³ µµ´ëü ¾î¶»°Ô?
/wireframe/index.asp °¡ ÀÖ´Ù°í Ĩ½Ã´Ù
index.asp ¿¡ ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ include Çϰí, Action ¿¡ »ç¿ëÇÒ Method ±¸Çö ÈÄ RouteTable ¿¡ µî·ÏÇÏ¸é ³¡
´ëÃæ ¾Æ·¡¿Í °°Àº ÄÚµå
<!--#include file="lib/lib.all.asp"--> <% Sub Main() Response.Write "main" End Sub Sub Hello() Response.Write "hello world" End Sub Sub SayHello() Response.Write "hello " Response.Write Controller.GetParam(0) End Sub '--ControllerÀÇ DefaultActionÀ» ÁöÁ¤ Controller.DefaultAction = "Main" '--RouteTable ¿¡ Action °ú Url Pattern À» µî·Ï Controller.Map.Add "SayHello", "hello", "([a-z0-9_]+)" 'QUERY_STRING ÀÌ "hello/asp" ÀÎ °æ¿ì ½ÇÇàµÊ Controller.Map.Add "Hello", "hello", "" 'QUERY_STRING ÀÌ "hello/" ÀÎ °æ¿ì ½ÇÇàµÊ Controller.Init %>
±âŸ url ¿¡ µû¸¥ ½ÇÇà °á°ú
http://yoursite.com/wireframe/index.asp => "main" Ãâ·Â
http://yoursite.com/wireframe/index.asp?hello/ => "hello world" Ãâ·Â
http://yoursite.com/wireframe/index.asp?hello/asp => "hello asp" Ãâ·Â
http://yoursite.com/wireframe/index.asp?hello => hello µÚ¿¡ / °¡ ¾øÀ¸¹Ç·Î "main" Ãâ·Â
http://yoursite.com/wireframe/index.asp?some/ => some Àº RouteTable ¿¡ ¾øÀ¸¹Ç·Î "main" Ãâ·Â

¸¸¾à index.asp °¡ IIS ¼³Á¤»ó ±âº»¹®¼­¶ó¸é url Àº Á» ´õ ª¾ÆÁý´Ï´Ù
http://yoursite.com/wireframe/?hello/asp -> "hello asp" Ãâ·Â
ÀÌ°Ç ±×³É index.asp ¿¡¼­ QUERY_STRING °Ë»ç ÈÄ ºÐ±â¸¸ ½ÃÄÑÁִ°ÅÀݾÆ...
¿¹ ¸Â½À´Ï´Ù.
Server.Execute ³ª Server.Transfer ÇØÁÖ¸é, ¹°À½Ç¥¸¸ Á¦¿ÜÇÏ¸é ±×·°Àú·° ÀÌ»Û ¸ð¾çÀÇ url À» À¯ÁöÇÑ Ã¤ ¿øÇÏ´Â È­¸éÀ» º¸¿©ÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù
´õ±º´Ù³ª ±×Á¤µµ ÀÏÀº À§¿Í °°Àº À½¿ïÇÑ ÄÚµåÀÇ µµ¿ò¾øÀ̵µ ¼Õ½±°Ô °¡´ÉÇÑ ÀÏÀÌÁö¿ä
¾Æ... ³ª´Â ¶Ç »ðÁúÀ» Çß´ø °ÍÀΰ¡... ÇÏÁö¸¸ Àú´Â ½ÉÇÏ°Ô ±àÁ¤ÀûÀÎ °³¹ßÀÚÀ̹ǷÎ, ÀÌ¿Õ ½ÃÀÛÇÑ »ðÁú Á» ´õ ÆÄº¸±â·Î Çß½À´Ï´Ù
Data ±îÁö °¡Á®¿Íº¸ÀÚ
System.Data.DataSet, System.Data.DataTable... ¾ÖÃÊ¿¡ À̰͵éÀ» ¸ô¶ú´Ù¸é ¾ó¸¶³ª ¸¶À½ ÆíÇßÀ»±î¿ä
ADODB.Recordset ¸¸À¸·Îµµ ÇູÇÑ ³ª³¯À» º¸³Â¾ú´ø, °ú°ÅÀÇ ÇÑ ¶§°¡ ±×¸®¿ö Áö´Â±º¿ä
ÇÏÁö¸¸ Àú´Â ±Ù¼º ÀÖ´Â °³¹ßÀÚÀ̹ǷÎ, DataSet ¹× DataTable µµ ±¸Çö(ÀÌ¶ó ¾²°í, '¾óÃß ºñ½ÁÇÏ°Ô ¸¸µé±â'¶ó Àд´Ù)ÇØÁÖ±â·Î Çß½À´Ï´Ù
ÀÌ´Â js ·Î ÀÌ¹Ì ±¸ÇöÇÑ ¹Ùµµ ÀÖ°í, È÷µùÅ©´ÔÀÇ Recordset Helper µµ ÀÖÀ¸¹Ç·Î ¾î·Á¿î °Í¸¸Àº ¾Æ´Ï¾ú½À´Ï´Ù
±× °á°ú¹°¿¡ ´ëÇÑ ¿ë·Ê´Â ´ëÃæ ¾Æ·¡¿Í °°½À´Ï´Ù
'MS SQL¿¡¼­ ´ÙÁß·¹ÄÚµå¼Â ¹Ýȯ Set rs = db.Execute("SELECT * FROM TABLE1;SELECT * FROM TABLE2;",,adCmdText) Set ds = new DataSet ds.Load(rs) '·¹ÄÚµå¼ÂµéÀ» GetRows ·Î ¹è¿­¿¡ ÀúÀåÇÕ´Ï´Ù Set rs = Nothing Response.Write ds(0,0,0) 'ù¹øÂ° RecordsetÀÇ Ã¹Çà ù¿­À» Ãâ·ÂÇÕ´Ï´Ù Response.Write ds(1,1,0) 'µÎ¹øÂ° RecordsetÀÇ µÎ¹øÂ°Çà ù¿­À» Ãâ·ÂÇÕ´Ï´Ù Set ds = Nothing
±×·¯³ª, ¾Æ¹«¸® Prototype ÀÌ¶óµµ PagingÀº ÇÊ¿äÇÑ ¹ý. »óȲ¿¡ µû¶ó ¹Ù²î´Â ÆäÀÌ¡ Äõ¸®´Â ¿Ö À̸®µµ ±ÍÂúÀº °ÍÀÎÁö...
Table ¸í¸¸ ³Ñ°ÜÁÖ¸é ±×³É Âß »Ì¾Æ¾µ ¼ö ¾øÀ»±î... ±×·¡¼­ ¶Ç ´Ù½Ã ½Ã°£À» ÅõÀÚ ¾Æ·¡¿Í °°Àº ¸ð¾ç»õ±îÁö À̸£°Ô µÇ¾ú½À´Ï´Ù
Set tables = BaseSqlModel.CreateInstance("TABLES","INFORMATION_SCHEMA") Set dt = tables.Where("TABLE_SCHEMA!='INFORMATION_SCHEMA'").Where("TABLE_TYPE='BASE TABLE'").Select("TABLE_NAME").ToPagedList(10, 1) Response.Write "Total " & dt.VirtualCount & " rows<br>" For i = 0 To dt.Count - 1 Response.Write dt(i, "TABLE_NAME") Response.Write "<br>" Next Set dt = Nothing
BaseSqlModelÀº Select, Where, OrderBy, GroupBy, Take µîÀÇ Äõ¸®¹®À» Á¶¸³ÇÏ´Â method ¿Í, Single, ToList, ToPagedList, ToDataRow µîÀÇ Data ¸¦ ºÒ·¯¿À´Â method ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù
sql °ü·Ã method È£Ãâ ½Ã, ³»ºÎÀÇ queryParams ¿¡ select, where , order by ÀýÀ» ¹Ì¸® ÁغñÇØµÎ¾ú´Ù°¡, ToList, ToPagedList µîÀ» È£ÃâÇÒ ¶§ Äõ¸®¹®À» Á¶ÇÕÇÏ¿© DataBase ¿¡ ÁúÀÇÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù
ÇÏÁö¸¸ À̰͸¸À¸·Î´Â ¹«¾ð°¡ ºÎÁ·ÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù
À̸¦Å׸é, ·Î±×ÀÎ °ü·Ã Å×À̺í°ú ¸ÅĪÇÏ´Â Logins ¶ó´Â Model ÀÌ ÀÖ´Â °æ¿ì, ·Î±×ÀÎ Á¤º¸ÀÇ Á¶È¸ »Ó¸¸ ¾Æ´Ï¶ó, ·Î±×ÀÎ ÇÁ·Î¼¼½º ¶ÇÇÑ Logins ÀÇ Áß¿äÇÑ ¿ä¼Ò°¡ µÇ¾î¾ß Çϱ⠶§¹®ÀÌÁÒ
ÀÌ·± °æ¿ì¸¦ À§ÇØ BaseSqlModelÀ» È®Àå °¡´ÉÇÏ·Ï ¸¸µé¾î º¸°Ú½À´Ï´Ù
ÇØ´ç À¥¾îÇø®ÄÉÀ̼ǿ¡ »ç¿ëµÉ Model µéÀ» ¸ðµÎ models.asp ¿¡ ±â¼úÇØµÎ¾ú´Ù°í Ĩ½Ã´Ù
-- models.asp -- <script runat="server" language="jscript"> var Models = {}; Models.Logins = BaseSqlModel.Constructor(["LOGINS","INFORMATION_SCHEMA"],{ Login : function(id, pw) { this.Reset(); //±âÁ¸ queryParams ¸®¼Â this.Where("login_id='" + String(id).replace(/'/g,"''") + "'"); if(this.Count() == 0) { return 101; //¾ÆÀÌµð ¾øÀ½ } if(this.Select("login_pw").Single().login_pw != pw) { return 102; //ºñ¹Ð¹øÈ£ ºÒÀÏÄ¡ } return 0; } }); ... </script> -- index.asp -- <!--#include file="models.asp"--> <object runat="server" id="db" progid="adodb.connection"></object> <% Sub Login() Dim logins, return_value db.Open Application("ConnectionString") Set logins = Models.Logins() return_value = logins.Login(Request.Form("id"), Request.Form("pw")) Set logins = Nothing db.Close If return_value > 0 Then Response.Write "·Î±×ÀÎ ½ÇÆÐ. err code-" & return_value Else Response.Write "·Î±×ÀÎ ¼º°ø" End If End Sub Controller.DefaultAction = "Index" '<form action="http://yoursite.com/wireframe/?login/" ... ÀÎ °æ¿ì Login ÀÌ ½ÇÇàµÇ°Ô Controller ¿¡ Action µî·Ï Controller.Map.Add "Login", "login", "" Controller.Init %>
À§ Äڵ忡¼­ Áß¿äÇÑ ºÎºÐÀº BaseSqlModel.Constructor ÀÔ´Ï´Ù
À¯¿¬ÇÑ È®ÀåÀ» À§ÇØ BaseSqlModel Àº jscript ·Î ±¸ÇöµÇ¾î Àִµ¥, BaseSqlModel.Constructor ºÎºÐÀ» »ìÆìº¸ÀÚ¸é...
function BaseSqlModel(table, owner, withoutSchema){ ... }; // asp ÀÇ vb ½ºÅ©¸³Æ®¿¡¼­ Set model = new BaseSqlModel("table", "owner", True) ó·³ »ý¼º Çϸé Syntax ¿À·ùÀ̹ǷΠ¾Æ·¡¿Í °°ÀÌ static »ý¼ºÀÚ¸¦ Çϳª ¸¸µé¾î ÁÜ BaseSqlModel.CreateInstance = function(table, owner, withoutSchema) {return new BaseSqlModel(table, owner, withoutSchema);} BaseSqlModel.Constructor = function(initArgs, extend) { return (function() { //È®Àå¿¡ »ç¿ëÇÒ °´Ã¼°¡ ¾ø´Ù¸é ºñ¾îÀÖ´Â °´Ã¼ »ý¼º extend = extend || {}; //ÀÏ´Ü BaseSqlModel instance »ý¼º ÈÄ, »ý¼ºµÈ instance ¿¡ extend ÀÇ ¼Ó¼º,ÇÔ¼ö¸¦ º¹»çÇÑ ÈÄ, È®ÀåµÈ BaseSqlModel ¹Ýȯ var model = BaseSqlModel.CreateInstance.apply(null, initArgs); for(var prop in extend) model[prop] = extend[prop]; return model; }); }
ÁÖÀÇÇÒ Á¡Àº, Constructor °¡ instance ¸¦ »ý¼ºÇؼ­ ¹ÝȯÇÏ´Â °ÍÀÌ ¾Æ´Ï°í, ¹Ì¸® ÁÖ¾îÁø ÀÎÀÚ¸¦ ÀÌ¿ëÇØ instance ¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦ ¹ÝȯÇÏ´Â Á¡ÀÔ´Ï´Ù
±×·±µ¥, ºÒ·¯¿Â Data ´Â ¾î¶»°Ô º¸¿©ÁÖÁö?
ÀÌÁ¦ Controller ÀÇ Action À¸·Î ÁöÁ¤ÇÑ ÇÔ¼ö ³»ºÎ¿¡¼­, Data µµ ºñ±³Àû ¼Õ½±°Ô °¡Á®¿Ã ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù(¶ó±â º¸´Ù´Â ±×·¸´Ù°í ÇØµÓ½Ã´Ù)
Server.Execute ³ª Server.Transfer »ç¿ë½Ã, º¯¼ö¸¦ ³Ñ°ÜÁÖ´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇϹǷΠÀÏ´Ü ³í¿Ü.
Sub Index ÀÇ ³»ºÎ¿¡¼­ <!--#include ¸¦ »ç¿ëÇØµµ µÇÁö¸¸, ÀÌ¿Õ Model ºñ½º¹Ç¸® ±îÁö ÇѰŠView ±îÁö ÇØº¸ÀÚ...
±×·¡¼­ µÎ°Ô µÈ ÀÚÃæ¼ö°¡ Template engine À̾úÀ¸´Ï.(¾îÂîµÈ°Ô À̳ðÀÇ »ðÀº Çѹø ÀâÀ¸¸é ³õÀ» ¼ö°¡ ¾ø´Â°ÍÀΰ¡)
Set dt = BaseSqlModel.CreateInatance("TABLES", "INFORMATION_SCHEMA").Where("TABLE_SCHEMA='dbo'").ToList() 'loop ·Î µ¹·ÁÁÙ Data °¡Á®¿À±â Helper.Template.Execute "view/index.htm", dt 'view/index.htm ¿¡ ViewData ·Î dt ÇÒ´ç ÈÄ º¯È¯ ½ÇÇà Set dt = Nothing -- view/index.htm ³»¿ë -- ...... <table> <caption><%= ViewData.Count %> rows</caption> <!--INFORMATION_SCHEMA.TABLES ¸ñ·Ï Á¶È¸--> <% for(var i = 0; i < ViewData.Count; i++) { %> <tr> <td><%= i %></td> <td><%= ViewData(i,"TABLE_NAME") %></td> </tr> <% } %> </table> <!--Request.ServerVariables Á¤º¸ Ç¥½Ã--> <dl> <% Helper.Iterate(Request.ServerVariable, function(key,val){ %> <dt><%= key %></dt><dd><%= val %></dd> <% }); %> </dl> ...
ÅÛÇø´ ±¸ÇöÀÌ ¹Ù²î¾ú½À´Ï´Ù
±âÁ¸ÀÇ ¹®ÀÚ¿­ ġȯ ¹æ½Ä¿¡¼­, jscript asp ±¸¹® eval ¹æ½ÄÀ¸·Î º¯°æµÇ¾ú½À´Ï´Ù

<% for(var i = 0; i < 10; i++){ %>
The number is <%= i %>
<% } %>

Helper.Template ¿¡¼­ "<% ... %>" ºÎºÐÀ», Ä£ÀýÇÑ Á¤±Ô½Ä¾¾ÀÇ µµ¿òÀ» ¾ò¾î ¾Æ·¡¿Í °°ÀÌ jscript syntax ·Î º¯È¯ÇÕ´Ï´Ù

for(var i = 0; i < 10; i++){
Response.Write("The number is ");
Response.Write(i);
}

±×¸®°í, À§ÀÇ º¯È¯µÈ ±¸¹®À» jscript ÀÇ eval ÇÔ¼ö·Î Çѹ濡 ½ÇÇà.
jscript ±¸¹®ÀÇ ¹«ÇÑ Áö¿øÀ̶ó´Â µæÀÌ ÀÖ´Â ¹Ý¸é, ÇÒ´çÇÑ º¯¼ö¸¸ Á¢±Ù°¡´ÉÇÏ´Ù´Â ÅÛÇø´ÀÇ ÀϹÝÀûÀÎ ±ÔÄ¢¿¡¼­´Â ¹þ¾î³ª°Ô µÆ½À´Ï´Ù.

master, detail view ÇÏ¿¡¼­ ¿øÈ°ÇÑ º¯¼öȰ¿ëÀ» À§ÇØ, <script runat="server"></script> ±¸¹®À» »ç¿ëÇϸç,
ÅÛÇø´ ¿£Áø¿¡¼­ ¹ø¿ªÇÏ´Â ¼ø¼­´Â ´ÙÀ½°ú °°½À´Ï´Ù
1. master page ÀÇ script runat="server" ±¸¹® ½ÇÇà
2. detail page ÀÇ script runat="server" ±¸¹® ½ÇÇà
3. master page ÀÇ content place holder ¿¡ detail page ÀÇ content ³»¿ë ´ëÀÔ
4. <% %> ±¸¹®ÀÌ Æ÷ÇÔµÈ Æò¹® ½ÇÇà

ÇÏÁö¸¸ ¿©ÀüÈ÷ Åëä·Î eval ó¸®Çϱ⠶§¹®¿¡ view template ¿¡¼­ ¿À·ù°¡ ³ª´Â °æ¿ì µð¹ö±ëÇϱⰡ ¸Å¿ì ¾î·Æ½À´Ï´Ù --master pageÀÇ ³»¿ë-- <script runat="server"> this.title = "WebSite Title"; </script> <%= this.title %> Start Content <asp:contentplaceholder id="content" /> End Content --detail pageÀÇ ³»¿ë-- <script runat="server"> this.title += " - Page Title"; </script> <asp:content contentplaceholderid="content"> Detail Content </asp:content> --¹ø¿ª °á°ú-- this.title = "WebSite Title"; this.title += " - Page Title"; Response.Write(this.title); Response.Write("\r\nStart Content\r\n"); Response.Write("\r\nDetail Content\r\n"); Response.Write("End Content"); --½ÇÇà °á°ú-- WebSite Title - Page Title Start Content Detail Content End Content * master page ¿Í detail page ÀÇ this ´Â ºñ¾îÀÖ´Â js Object À̱⠶§¹®¿¡, ¸â¹ö¸¦ ·±Å¸ÀÓ¿¡ ¼±¾ð¸¸ ÇØÁÖ¸é master, detail ¾çÂÊ¿¡¼­ ¸ðµÎ °øÀ¯ °¡´ÉÇÕ´Ï´Ù
½ÇÁ¦ Model Ȱ¿ëÀº ¾î¶»°Ô?
±×·³ ½ÇÁ¦ ¸ðµ¨À» ¼³°èÇϰí Ȱ¿ëÇØº¸°Ú½À´Ï´Ù.
¾Æ·¡¿Í °°Àº Å×À̺íµéÀÌ ÀÖ½À´Ï´Ù
Table : wireframe.Board
Seq
Name

Table : wireframe.Article
Seq
BoardSeq
Title
Content
Name
Password

µü ºÁµµ wireframe.Board.Seq ¿Í wireframe.Article.BoardSeq °¡ 1:n °ü°è°¡ ÀÖ°Ú±º¿ä
¸ðµ¨À» ¼³°èÇÑ´Ù°í Ä¡¸é,
wireframe.Board => Models.Boards
wireframe.Board ÀÇ 1 Row => Models.Boards.Single
wireframe.Article => Models.Articles
wireframe.Article ÀÇ 1 Row => Models.Articles.Single
À§¿Í °°ÀÌ ³ª¿À°Ú³×¿ä
±×¸®°í, 1 ¹ø °Ô½ÃÆÇ¿¡ ¼ÓÇÑ °Ô½Ã¹°ÀÇ ¸ñ·ÏÀ» »ÌÀÚ¸é, Models.Articles.Where("BoardSeq=1").ToList °ú °°ÀÌ µÇ°Ú±º¿ä
±×·³ Set board = Models.Boards().Where("Seq=1").Single() °ú °°ÀÌ Æ¯Á¤°Ô½ÃÆÇÀÇ Á¤º¸¸¦ ºÒ·¯¿Ã ¶§,
¿¬°üµÈ °Ô½Ã¹° Á¤º¸µµ ÇÔ²² °¡Á®¿À·Á¸é, Models.Boards.Single À» override ÇÏ¸é µÇ°Ú±¸³ª...
´ëÃæ ÀÌ·± ½Ã³ª¸®¿À°¡ ³ª¿É´Ï´Ù --models.asp-- var Models = { Boards : BaseSqlModel.Constructor(["Board","wireframe"],{ Single : function(){ var obj = this.base.Single(); obj.Articles = function(){return Models.Articles().Where("BoardSeq=" + this.Seq);} return obj; } }) , Articles : BaseSqlModel.Constructor(["Article","wireframe"],{ Single : function(){ var obj = this.base.Single(); obj.Board = function(){return Models.Boards().Where("Seq=" + this.BoardSeq).Single();} return obj; } }) } --index.asp-- Controller.Map.Add "ListArticles", "list", "(\d+)" Controller.Map.Add "ViewArticle", "view", "(\d+)" .....±âŸ ¼³Á¤...... Controller.Init --controllers.asp-- Sub ListArticles() -- ?list/[board_seq] ÀÎ °æ¿ì ½ÇÇàµÊ Dim boardSeq, board boardSeq = Controller.GetParam(0) Set board = Models.Boards().Where("Seq=" & boardSeq).Single() Helper.View "view/list.asp", board End Sub Sub ViewArticle() -- ?view/[article_seq] ÀÎ °æ¿ì ½ÇÇàµÊ Dim articleSeq, article articleSeq = Controller.GetParam(0) Set article = Models.Articles().Where("Seq=" & articleSeq).Single() Helper.View "view/view.asp", board End Sub --view/list.asp-- <script runat="server"> var articles = ViewData.Articles().ToPagedList(10, 1) </script> <strong><%= ViewData.Name %></strong> <ul> <% for(var i = 0; i < articles.Count; i++) { %> <li> <a href="<%= Controller.GetActionUrl("ViewArticle", articles(i, "Seq")) %>"><%= articles(i, "Title") %> <em>written by <%= articles(i, "Name") %></em></a> </li> <% } %> </ul> --view/view.asp-- <script runat="server"> var board = ViewData.Boards().Single(); </script> <strong><%= board.Name %></strong> <dl> <dt>Seq</dt> <dd><%= ViewData.Seq %></dd> <dt>Title</dt> <dd><%= ViewData.Title %></dd> <dt>Content</dt> <dd><%= ViewData.Content %></dd> <dt>Name</dt> <dd><%= ViewData.Name %></dd> <dt>Password</dt> <dd><%= ViewData.Password %></dd> </dl> <a href="<%= Controller.GetActionUrl("ListArticles", board.Seq) %>">Back to list</a>
Controller (lib.controller.asp)
ActionParams Request.QueryStringÀ» ºÐ¼®ÇÏ¿© ControllerÀÇ Action¿¡¼­ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ½ÇÇàÀÎÀÚ¸¦ ÀúÀåÇÏ´Â js Object
ActionFilter DoAction À¸·Î Action ÀÌ ½ÇÇàµÇ±â Àü ¼±ÇàµÇ´Â Á¶°ÇÆÇº°¿ë ÇÔ¼ö¿Í, Action ½ÇÇà ÈÄ ½ÇÇàµÇ´Â ÇÔ¼ö ¸ðÀ½
Sub Index() ... End Sub Function BeforeIndex() ... ¿©±â¿¡¼­ True ¸¦ ¹ÝȯÇϸé, Index °¡ ½ÇÇàµÇ°í, ¿©±â¿¡¼­ False ¸¦ ¹ÝȯÇϸé, Index ´Â ½ÇÇàµÇÁö ¾ÊÀ½ ... End Function Sub AfterIndex() ... ¿©±â¿¡¼­ Index ½ÇÇà ÀÌÈÄÀÇ Ã³¸® ... End Sub Controller.ActionFilter.Prepend "Index", "BeforeIndex" Controller.ActionFilter.Append "Index", "AfterIndex"
ActionFilter.Prepend "*", "DoSome" ÀÎ °æ¿ì ¸ðµç Action ½ÇÇà ÀÌÀü¿¡ DoSome À¸·Î ½ÇÇà¿©ºÎ¸¦ ÆÇ´ÜÇÕ´Ï´Ù
DefaultAction ÇöÀç url À» ±âÁØÀ¸·Î Controller.Map (RouteTable ¿ªÇÒ) ¿¡ ÀÏÄ¡ÇÏ´Â Action ÀÌ ¾ø´Ù¸é, DefaultAction À¸·Î ÁöÁ¤µÈ Action Method ¸¦ ½ÇÇàÇÕ´Ï´Ù
DoAction(actionName) actionName À¸·Î µî·ÏµÈ Action Method ¸¦ ½ÇÇàÇÕ´Ï´Ù
ÇÔ¼ö½ÇÇà½Ã ÀÎÀÚ´Â µû·Î ³Ñ°ÜÁÖÁö ¾ÊÀ¸¸ç, ½ÇÇà½Ã ÀÎÀÚ¸¦ ÂüÁ¶ÇÏ°í ½Í´Ù¸é, GetParam(paramIndex) À» »ç¿ëÇÕ´Ï´Ù
ActionFilter.Prepend ·Î actionName ¿¡ ÇØ´çÇÏ´Â À̺¥Æ® Çڵ鷯°¡ Á¸ÀçÇÑ´Ù¸é, ÇØ´ç ÇÔ¼ö¸¦ ¸ÕÀú ½ÇÇàÇÑ ÈÄ ¹ÝȯµÇ´Â Boolean °ª¿¡ µû¶ó ÇØ´ç Action ÀÇ ½ÇÇà¿©ºÎ¸¦ ÆÇ´ÜÇÕ´Ï´Ù
GetActionLink(actionName, linkText[, param1, param2]) actionName À» ½ÇÇàÇÒ ¼ö ÀÖ´Â url ·Î A¸µÅ©¸¦ Ãâ·ÂÇÕ´Ï´Ù
Controller.Map.Add "ViewArticle", "view", "(\d+)"
°ú °°ÀÌ Action À» µî·ÏÇÑ °æ¿ì, Controller.GetActionLink("ViewArticle", "view this article", 123) Àº "<a href="?view/123">view this article</a>" À» ¹ÝȯÇÕ´Ï´Ù
GetActionUrl(actionName[, param1, param2]) actionName À» ½ÇÇàÇÒ ¼ö ÀÖ´Â url À» ¹ÝȯÇÕ´Ï´Ù
Controller.Map.Add "ViewArticle", "view", "(\d+)"
°ú °°ÀÌ Action À» µî·ÏÇÑ °æ¿ì, Controller.GetActionUrl("ViewArticle", 123) Àº "?view/123" À» ¹ÝȯÇÕ´Ï´Ù
GetParam(paramIndex) Controller.Map.Add "ViewArticle", "view", "(\d+)"
°ú °°ÀÌ Action À» µî·ÏÇÑ °æ¿ì, Controller.GetParam(0) Çϸé (\d+) ¿¡ ÇØ´çÇÏ´Â °ªÀ» °¡Á®¿É´Ï´Ù
Controller.Map.Add "ViewArticle", "view" ¿Í °°ÀÌ Action À» µî·ÏÇß´Ù¸é
"?view/123/1" °ú °°Àº url À̶ó¸é, GetParam(0) Àº "123", GetParam(1) Àº "1" À» ¹ÝȯÇÕ´Ï´Ù
Init() url ·ÎºÎÅÍ Action °ú ActionParam À» ÃßÃâÇÏ¿© ÇØ´ç Action Method ¸¦ ½ÇÇàÇÕ´Ï´Ù
Map Route Table ¿ªÇÒÀ» ÇÏ´Â js Object
Add Method ¸¦ ÅëÇØ QueryString ¿¡ µû¶ó ½ÇÇàµÉ Action À» Ãß°¡ÇÕ´Ï´Ù
Name ÇöÀç ½ÇÇàÁßÀÎ Action ÀÇ À̸§À» ¹ÝȯÇÕ´Ï´Ù
Redirect(actionName[, actionParam1, actionParam2, ...]) actionName À¸·Î µî·ÏµÈ Action Method ·Î ÇöÀç ¿äûÀ» Redirect ÇÕ´Ï´Ù.(Response.Redirect ÀÌ¿ëÇÔ)
RedirectAction(actionName[, actionParam1, actionParam2, ...]) actionName À¸·Î µî·ÏµÈ Action Method ·Î ÇöÀç ¿äû¿¡ ´ëÇÑ ÇÚµéÀ» ³Ñ°ÜÁÝ´Ï´Ù
BaseSqlModel (lib.model.sql.asp) - MS SQL 7.0ÀÌ»ó¿¡ SQLOLEDB Provider ·Î Á¢±ÙÇÏ´Â °æ¿ì À¯È¿ÇÕ´Ï´Ù
BaseSqlModel(table, owner, withoutSchema) »ý¼ºÀÚ
Select(selectColumns) select {selectColumns} ±¸¹®.
ÀÌ¹Ì Select °¡ Çѹø ½ÇÇàµÈ ÀÌÈÄ ´Ù½Ã Select ¸¦ ½ÇÇàÇÑ °æ¿ì ±âÁ¸ select ±¸¹®Àº ¼­ºêÄõ¸®·Î º¯È¯µÊ
Set t = BaseSqlModel.CreateInstance("TABLES", "INFORMATION_SCHEMA") t.Select("*").Where("TABLE_SCHEMA='dbo'").Select("TABLE_NAME") Response.Write t.GenerateQuery() => SELECT TABLE_NAME FROM (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_SCHEMA='dbo') T
Where(whereClause) where {whereClause} ±¸¹®.
ÁßÃ¸ÇØ¼­ »ç¿ëÇÏ´Â °æ¿ì µÚ¿¡ ½ÇÇàÇÑ Where ±¸¹®ÀÌ "AND" ·Î µ¡ºÙ¿©Áü
OR ±¸¹® »ç¿ëÀ» À§Çؼ­´Â Where("TABLE_NAME='TABLES' OR TABLE_NAME='VIEWS'") ¿Í °°ÀÌ »ç¿ë Set t = BaseSqlModel.CreateInstance("TABLES", "INFORMATION_SCHEMA") t.Select("*").Where("TABLE_SCHEMA='dbo'").Where("TABLE_NAME NOT LIKE 'sys%'") Response.Write t.GenerateQuery() => SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_SCHEMA='dbo' AND TABLE_NANE NOT LIKE 'sys%'
OrderBy(orderClause) order by {orderClause} ±¸¹®.
ÁßÃ¸ÇØ¼­ »ç¿ëÇÏ´Â °æ¿ì µÚ¿¡ ½ÇÇàÇÑ ±¸¹®ÀÌ "," ·Î µ¡ºÙ¿©Áü
OrderBy("col1 ASC").OrderBy("col1 DESC") ¿Í °°ÀÌ °°Àº Ä÷³¿¡ ´ëÇØ ´Ù¸¥ Á¤·ÄÀÌ È£ÃâµÇ¾ú´Ù¸é, °¡Àå ¸¶Áö¸· È£ÃâÀÌ ¿ì¼±ÇÔ Set t = BaseSqlModel.CreateInstance("TABLES", "INFORMATION_SCHEMA") t.Select("*").OrderBy("TABLE_NAME") Response.Write t.GenerateQuery() t.OrderBy("TABLE_NAME DESC") Response.Write t.GenerateQuery() t.OrderBy("TABLE_SCHEMA ASC") Response.Write t.GenerateQuery() => SELECT * FROM [INFORMATION_SCHEMA].[TABLES] ORDER BY TABLE_NAME => SELECT * FROM [INFORMATION_SCHEMA].[TABLES] ORDER BY TABLE_NAME DESC => SELECT * FROM [INFORMATION_SCHEMA].[TABLES] ORDER BY TABLE_NAME DESC,TABLE_SCHEMA ASC
GroupBy(groupClause) group by {groupClause} ±¸¹®.
ÁßÃ¸ÇØ¼­ »ç¿ëÇÏ´Â °æ¿ì µÚ¿¡ ½ÇÇàÇÑ ±¸¹®ÀÌ "," ·Î µ¡ºÙ¿©Áü
Set t = BaseSqlModel.CreateInstance("TABLES", "INFORMATION_SCHEMA") t.Select("TABLE_SCHEMA,COUNT(*) CNT").GroupBy("TABLE_SCHEMA").OrderBy("1") Response.Write t.GenerateQuery() => SELECT TABLE_SCHEMA,COUNT(*) CNT FROM [INFORMATION_SCHEMA].[TABLES] GROUP BY TABLE_SCHEMA ORDER BY 1
Count() SELECT COUNT(*) ±¸¹®.
Set t = BaseSqlModel.CreateInstance("TABLES", "INFORMATION_SCHEMA") Response.Write t.Where("TABLE_SCHEMA='dbo'").Count() => SELECT COUNT(*) FROM (SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_SCHEMA='dbo') T ½ÇÇà ÈÄ °á°ú°ª ¹Ýȯ
ToList() GenerateQuery() ÇÑ °á°ú SQL À» ½ÇÇàÇÏ¿© DataTable À» ¹ÝȯÇÕ´Ï´Ù
ToPagedList(pageSize, currentPage) pageSize, currentPage ·Î ÆäÀÌ¡µÈ °á°ú DataTable À» ¹ÝȯÇÕ´Ï´Ù
int identity Ä÷³À̳ª ´ÜÀÏ Primary Key °¡ Á¸ÀçÇÑ´Ù¸é, not in Äõ¸®¸¦ »ç¿ëÇϸç, not in À» »ç¿ëÇÒ ¼ö ¾ø´Â »óȲÀ̶ó¸é ADODB.Recordset.Move(pageSize * (currentPage - 1)) ½ÇÇà ÈÄ °á°ú¸¦ ¹ÝȯÇÕ´Ï´Ù
ToDataRow() ÇöÀç queryParams ¸¦ ±âÁØÀ¸·Î SELECT TOP 1 À¸·Î ½ÇÇàÇÑ ÈÄ, DataRow ¸¦ ¹ÝȯÇÕ´Ï´Ù
Single() ÇöÀç queryParams ¸¦ ±âÁØÀ¸·Î SELECT TOP 1 À¸·Î ½ÇÇàÇÑ ÈÄ, columnName / rowValue pair ÀÇ js Object ¸¦ ¹ÝȯÇÕ´Ï´Ù
GetColumns() TABLE ÀÇ Column Á¤º¸¸¦ js Object ·Î ¹ÝȯÇÕ´Ï´Ù
Scaffold
Áö°Ü¿î ŸÀÌÇÎ. ±×·¡¼­ µµÀüÇÑ dynamic scaffolding ÀÔ´Ï´Ù
°¨»óÀº Blog ¿¡¼­
16:13:14.436 - AppLog initialized
16:13:14.452 - AppLog flushed