powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / отличие CSP от CLS
83 сообщений из 83, показаны все 4 страниц
отличие CSP от CLS
    #37083512
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чем отличие между созданием csp страницы и созданием класса вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Class User.NewClass1 Extends %CSP.Page [ ProcedureBlock ]
{

ClassMethod OnPage() As %Status
{
	&html<<html>
	<head>
	</head>
	<body>>
	;To do...
	&html<</body>
	</html>>
	Quit $$$OK
}

}

есть ли какие-то явные преимущества одного из этих методов?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083539
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwerВ чем отличие между созданием csp страницы и созданием класса
Все легко сравнивается если csp страницу "Вид->Посмотр других"...

AndrewQwerесть ли какие-то явные преимущества одного из этих методов?
csp - более хтмэльная, меньше писанины.
cls - уже скомпилированая, типа быстрее грузится.

Но никто не запретил писать csp, потом самому их компилировать... Потом использовать в урлах расширение cls...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083548
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cls,
проще организовать наследование,
удобнее писать на чистом COS
можно получить более читаемый удобный код
csp,
можно использовать теги <csp:?>
проще писать когда в основном это HTML
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083588
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясненько, спасибо
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083617
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorможно получить более читаемый удобный код
В сравнении с csp? В cls будет более читабельный код? По-мне так это очень сомнительное высказываете... Особенно если учесть что речь таки идёт о вэбе.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083625
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это значит менее читабельно...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
<HTML>
<!--Кривошеев С.А.-->
<HEAD>
<TITLE>Абонент</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<link rel="stylesheet" type="text/css" href="#($$MyCSS^version)#">

<script language="javascript">

// Обновить информацию
function LoadInfo() {
	var obj=document.fAbon
	obj.submit()
}

// Переход на другую страницу
function Go(File) {
	var obj=document.fAbon
	obj.action=File
	obj.submit()
}

// Запись данных
function Save(Id) {
	fAbon_save()
	alert("Данные записаны!")
}

// Удалить тип версии
function DelAbon(Id) {
	var ok
	ok=confirm("Удалить абонента")
	if (ok) {
		ok=#server(..cDelAbon(Id))#
		ok=document.fAbon.type.value
		Go("abonall.csp?type="+ok)
	}
}
</script>

</HEAD>

<csp:method name="cDelAbon" arguments="Id:%String" returntype="%String">  
	// Удалить тип версии
	n o
	s o=##class(ver.Abon).%OpenId(Id)
	d ##class(ver.Abon).%Delete(o.%Oid())
	d o.%Close()
	q  1 
</csp:method>

<BODY onload='document.fAbon.tCode.focus()'>

<csp:object name='oAbon' classname='ver.Abon' objid='#(%request.Data("abon", 1 ))#'>

<form name='fAbon' cspbind='oAbon' method='post' action='abon.csp' onsubmit='return Save(#(%request.Data("type", 1 ))#)'>
<!--Основные переменные-->
<input type='hidden' name='abon' value='#(%request.Data("abon", 1 ))#'>
<input type='hidden' name='type' value='#(%request.Data("type", 1 ))#'>
<input type='hidden' name='dprt' value='#(%request.Data("dprt", 1 ))#'>

<!--Основная структурная таблица-->
<table width=' 100 %' border=' 0 '>
<tr>
<td valign='top' width=' 90 %'>
<h1>Абонент #($$NameAbon^version(oAbon.Code,%request.Data("dprt", 1 )))#</h1>
<!--Таблица данных-->
<table border=' 0 '>
<tr>
<td>Код 
<td><input type='text' name='tCode' cspbind='Code' title='Код из дешифратора D_ABON'>
</table>
<td valign='top'>
<!--Таблица кнопок-->
<table border=' 0 '>
<tr>
<td><input type='button' value='На начало' onclick='Go("info.csp")'>
<tr>
<td><input type='button' value='Выход' onclick='Go("abonall.csp?type="+#(%request.Data("type", 1 ))#)'>
<tr>
<td><input type='submit' value='Записать'>
<tr>
<td><input type='button' value='Удалить' onclick='DelAbon(#(%request.Data("abon", 1 ))#)'>
</table>
</table>
</form>
</BODY>
</HTML>

Та же страничка но в cls, более читабельна?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
Import User

Class air.vers.abon Extends %CSP.Page [ ClassType = "", Language = cache, Not ProcedureBlock ]
{

Parameter CONTENTTYPE = "TEXT/HTML";

Parameter CSPFILE = "c:\Inetpub\wwwroot\VERS\abon.csp";

Parameter CSPURL = "/vers/abon.csp";

Parameter FileTimestamp = "60465,33839";

ClassMethod OnPage() As %Status
{
 Do ..OnPagePREHTML()
 Do ..OnPageCSPROOT()
 Do ..OnPagePOSTHTML()
 Quit $$$OK
}

ClassMethod OnPageBODY() As %Boolean
{
 Write "<BODY onload='document.fAbon.tCode.focus()'>"
 Write !,(..HyperEventBody())
 Write !,!
 If ((%request.Data("abon", 1 ))'="") {
     Set oAbon = ##class(ver.Abon).%OpenId((%request.Data("abon", 1 )))
 } Else {
     Set oAbon = ##class(ver.Abon).%New()
 }
 Write !,!,"<form name='fAbon' method='post' action='abon.csp' onsubmit='return Save("_(%request.Data("type", 1 ))_")'>"
 Write !,"<!--Основные переменные-->"
 Write !,"<input type='hidden' name='abon' value='"_(%request.Data("abon", 1 ))_"'>"
 Write !,"<input type='hidden' name='type' value='"_(%request.Data("type", 1 ))_"'>"
 Write !,"<input type='hidden' name='dprt' value='"_(%request.Data("dprt", 1 ))_"'>"
 Write !,!,"<!--Основная структурная таблица-->"
 Write !,"<table width='100%' border='0'>",!
 Write "<tr>",!
 Write "<td valign='top' width='90%'>",!
 Write "<h1>Абонент "_($$NameAbon^version(oAbon.Code,%request.Data("dprt", 1 )))_"</h1>",!
 Write "<!--Таблица данных-->"
 Write !,"<table border='0'>",!
 Write "<tr>",!
 Write "<td>Код ",!
 Write "<td>"
 Set %value = ..EscapeHTML($get(%request.Data("tCode", 1 ),$ZSTRIP($select(oAbon="":"", 1 :(oAbon.CodeLogicalToDisplay(oAbon.Code))),">W")))
 Write "<input VALUE="""_(%value)_""" type='text' name='tCode' title='Код из дешифратора D_ABON'>"
 Write !,"</table>",!
 Write "<td valign='top'>",!
 Write "<!--Таблица кнопок-->"
 Write !,"<table border='0'>",!
 Write "<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='На начало' onclick='Go(""info.csp"")'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='Выход' onclick='Go(""abonall.csp?type=""+"_(%request.Data("type", 1 ))_")'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='submit' value='Записать'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='Удалить' onclick='DelAbon("_(%request.Data("abon", 1 ))_")'>"
 Write !,"</table>",!
 Write "</table>",!
 Write "<input name=""OBJID"" type=""hidden"" value="""_($select(oAbon="":"", 1 :oAbon.%Id()))_""">"
 Write ..InsertHiddenFields("abon.csp"),!
 Write "</form>"
 Write !,"</BODY>"
}

ClassMethod OnPageCSPROOT() As %Boolean
{
 Do ..OnPageHTML()
}

ClassMethod OnPageHEAD() As %Boolean
{
 Write "<HEAD>"
 Write !,"<TITLE>Абонент</TITLE>",!
 Write "<META HTTP-EQUIV=""CONTENT-TYPE"" CONTENT=""TEXT/HTML; CHARSET=WINDOWS-1251"">"
 Write !,"<link rel=""stylesheet"" type=""text/css"" href="""_(..Link(($$MyCSS^version)))_""">"
 Write !,!,"<script language=""javascript"">"
 Write !,!,"// Обновить информацию",!
 Write "function LoadInfo() {",!
 Write $c( 9 )_"var obj=document.fAbon",!
 Write $c( 9 )_"obj.submit()",!
 Write "}",!
 Write !,"// Переход на другую страницу",!
 Write "function Go(File) {",!
 Write $c( 9 )_"var obj=document.fAbon",!
 Write $c( 9 )_"obj.action=File",!
 Write $c( 9 )_"obj.submit()",!
 Write "}",!
 Write !,"// Запись данных",!
 Write "function Save(Id) {",!
 Write $c( 9 )_"fAbon_save()",!
 Write $c( 9 )_"alert(""Данные записаны!"")",!
 Write "}",!
 Write !,"// Удалить тип версии",!
 Write "function DelAbon(Id) {",!
 Write $c( 9 )_"var ok",!
 Write $c( 9 )_"ok=confirm(""Удалить абонента"")",!
 Write $c( 9 )_"if (ok) {",!
 Write $c( 9 , 9 )_"ok="_($case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod"))_"('"_(..Encrypt($listbuild("air.vers.abon.cDelAbon:air.vers.abon"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""))_"',Id)",!
 Write $c( 9 , 9 )_"ok=document.fAbon.type.value",!
 Write $c( 9 , 9 )_"Go(""abonall.csp?type=""+ok)",!
 Write $c( 9 )_"}",!
 Write "}",!
 Write "</script>"
 Do ..fAbonGenJS()
 Write !,(..HyperEventHead())
 Write !,!,"</HEAD>"
}

ClassMethod OnPageHTML() As %Boolean
{
 Write "<HTML>"
 Write !,"<!--Кривошеев С.А.-->"
 Write !
 Do ..OnPageHEAD()
 Write !,!,!,!
 Do ..OnPageBODY()
 Write !,"</HTML>"
}

ClassMethod OnPagePOSTHTML() As %Boolean
{
 Set oAbon=$$$NULLOREF
}

ClassMethod OnPagePREHTML() As %Boolean
{
 Set oAbon=$$$NULLOREF
}

ClassMethod cDelAbon(Id As %String) As %String
{
   
 	// Удалить тип версии
 	n o
 	s o=##class(ver.Abon).%OpenId(Id)
 	d ##class(ver.Abon).%Delete(o.%Oid())
 	d o.%Close()
 	q  1 
}

/// Called to render JavaScript code that is required for form <var>fAbon</var>.
ClassMethod fAbonGenJS() [ Language = cache ]
{
 Write !,"<SCRIPT Language=JavaScript>",!
 Write "<!--",!
 Write "function fAbon_new()",!
 Write "{",!
 Write "   // invoke #server(air.vers.abon.fAbonLoad())",!
 Write "   return ("_$case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod")_"('",..Encrypt($listbuild("air.vers.abon.fAbonLoad"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""),"','') == 1);",!
 Write "}",!
 Write "function fAbon_save()",!
 Write "{",!
 Write "   var form = self.document.fAbon;",!
 Write "   var objid = form.OBJID.value;",!
 Write "   var result = 0;",!
 Write "   if (fAbon_validate()) {",!
 Do ..fAbonSavJS()
 Write "   }",!
 Write "   return (result == 1);",!
 Write "}",!
 Write "function fAbon_validate()",!
 Write "{",!
 Write "   var errorMsg = '';",!
 Write "   var missingMsg = '';",!
 Write "   var invalidMsg = '';",!
 Write "   var missingArray = new Array();",!
 Write "   var invalidArray = new Array();",!
 Write "   var valid;",!
 Write "   missingMsg = fAbon_testRequired(missingArray);",!
 Write "   invalidMsg = fAbon_testValid(invalidArray);",!
 Write "   if ((missingMsg == '') && (invalidMsg == '')) {",!
 Write "      return true;",!
 Write "   }",!
 Write "   errorMsg   = "_..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveError","The form was not saved because of the following error(s)."))_"+'\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveCorrect","Please correct these error(s) and try again."))_"+'\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n';",!
 Write "   if (missingMsg!= '') {",!
 Write "      errorMsg += "_..QuoteJS(%response.GetText("","%CSPBind","SaveRequiredError","The following required field(s) are empty: "))_" + missingMsg + '\n';",!
 Write "   }",!
 Write "   if (invalidMsg != '') {",!
 Write "      errorMsg += "_..QuoteJS(%response.GetText("","%CSPBind","SaveInvalidError","The following field(s) contain invalid values: "))_" + invalidMsg + '\n';",!
 Write "   }",!
 Write "   alert(errorMsg);",!
 Write "   return false;",!
 Write "}",!
 Write "function fAbon_testRequired(missingArray)",!
 Write "{",!
 Write "   var missingMsg = '';",!
 Do ..fAbonReqJS()
 Write "   return missingMsg;",!
 Write "}",!
 Write "function fAbon_testValid(invalidArray)",!
 Write "{",!
 Write "   var valid;",!
 Write "   var invalidMsg = '';",!
 Do ..fAbonValJS()
 Write "   return invalidMsg;",!
 Write "}",!
 Write "// -->",!
 Write "</SCRIPT>",!
 QUIT
}

/// Updates the form <var>fAbon</var> from the specified object instance by sending JavaScript to the client.
ClassMethod fAbonLoad(objid As %String, obj As %Integer = "") As %Boolean [ Language = cache ]
{
 If '..fAbonLoadJS(.objid,obj) {
   Write "CSPPage.alert("_..QuoteJS("fAbonLoad: "_%response.GetText("","%CSPBind","OpenObjectError","Unable to open object."))_");",!
   Do ..fAbonLoadJS(objid,obj, 1 )
 }
 QUIT  1 
}

/// Updates the form <var>fAbon</var> from the specified object instance by sending JavaScript to the client.  Error reporting is left to the caller.
ClassMethod fAbonLoadJS(objid As %String, obj As %Integer = "", alwaysLoad As %Boolean =  0 ) As %Boolean [ Language = cache ]
{
 New close,ok
 Set close= 0 ,ok= 1 
 If (obj'=$$$NULLOREF) {
   Set objid = obj.%Id()
 } Else {
   If (objid'="") {
     Set obj = ##class(ver.Abon).%OpenId(objid)
   } Else {
     Set obj = ##class(ver.Abon).%New()
   }
   If (obj=$$$NULLOREF) {
     If 'alwaysLoad Quit 0
     Set ok= 0 
   } Else {
     Set close= 1 
   }
 }
 Write "var form = CSPPage.document.fAbon;",!
 Write "if (form.tCode != null) { form.tCode.value = ",..QuoteJS($select(obj="":"", 1 :($select(obj.Code=$c( 0 ):"", 1 :(obj.CodeLogicalToDisplay(obj.Code)))))),";}",!
 Write "if (form.OBJID != null) { form.OBJID.value = ",..QuoteJS(objid),";}",!
 If close= 1  Set obj=""
 QUIT ok
}

/// Called during rendering of this page to write out JavaScript code to do required field tests for form <var>fAbon</var>.
ClassMethod fAbonReqJS() [ Language = cache ]
{
 QUIT
}

/// Called during rendering of this page to write out JavaScript code to invoke the server-side save method for form <var>fAbon</var>.
ClassMethod fAbonSavJS() [ Language = cache ]
{
 Write "      //invoke #server(air.vers.abon.fAbonSave())"
 Write !,"      result = "_$case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod")_"('",..Encrypt($listbuild("air.vers.abon.fAbonSave"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""),"',1,'',objid"
 Write ",",!,"         (form.tCode == null) ? null : cspTrim(form.tCode.value)" ;%in1
 Write ");",!
 QUIT
}

/// Saves the data sent from the form <var>fAbon</var> into the specified object instance. If successful, updates the values on the form.
ClassMethod fAbonSave(respond As %Boolean =  0 , ByRef errmsg As %String = "", objid As %String = "", %in1 As %Library.String) As %Boolean [ Language = cache ]
{
 New obj,sc,value,in,error,sverror,err,i,ok
 Set sc=$$$OK
 Set ok= 1 
 Set error=""
 Set sverror=""
 If (objid="") {
   Set obj = ##class(ver.Abon).%New()
 } ElseIf '$isobject(objid) {
   Set obj = ##class(ver.Abon).%OpenId(objid)
 } Else {
   Set obj = objid
 }
 If (obj=$$$NULLOREF) {
   If (respond) {
     Write "CSPPage.alert("_..QuoteJS(%response.GetText("","%CSPBind","SaveObjectError","Unable to open object for saving"))_");",!
   } Else {
     Set errmsg = %response.GetText("","%CSPBind","SaveObjectError","Unable to open object for saving")
   }
   QUIT  0 
 }
 ; Code 
 If $D(%in1) Do
 . Set value=$S(%in1="":"", 1 :##class(ver.Abon).CodeDisplayToLogical(%in1))
 . If (%in1'=""),(value="") Set error=error_"tCode has an invalid value.\n"
 . Else  Set obj.Code=value
 Set:error'="" ok=0
 Set:error="" sc=obj.%Save()
 If $$$ISERR(sc) {
   Set ok= 0 
   Do DecomposeStatus^%apiOBJ(sc,.err,"")
   For i= 1 : 1 :err {
     If (respond) {
       Set sverror=sverror_" + "_..QuoteJS(err(i))_" + '\n'"
     } Else {
       Set sverror=sverror_..EscapeHTML(err(i))_"\n"
     }
   }
 }
 If (respond) {
   If (ok) {
     Do ..fAbonLoad("",obj)
   } Else {
     Write "CSPPage.alert(",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveError","The form was not saved because of the following error(s)."))_"+'\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveCorrect","Please correct these error(s) and try again."))_"+'\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n'+",!
     Write "'",error,"'",sverror,");",!
   }
 } Else {
   Set errmsg=error_sverror
 }
 QUIT ok
}

/// Translates a submit request from form <var>fAbon</var> into a call to <METHOD>fAbonSave</METHOD>.
ClassMethod fAbonSubmit(ByRef errmsg As %String = "", objid) As %Boolean [ Language = cache ]
{
 New v
 Set v("Code")=$ZSTRIP($get(%request.Data("tCode", 1 )),">W")
 If $get(objid)="" Set objid=$get(%request.Data("OBJID", 1 ))
 Quit ..fAbonSave( 0 ,.errmsg,objid,v("Code"))
}

/// Called during rendering of this page to write out JavaScript code to do field validation tests for form <var>fAbon</var>.
ClassMethod fAbonValJS() [ Language = cache ]
{
 Quit
}

}
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083637
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsacls - уже скомпилированая, типа быстрее грузится.

Но никто не запретил писать csp, потом самому их компилировать... Потом использовать в урлах расширение cls...
Когда вы обращаетесь к csp, на самом деле идет запуск метода класса, так что с точки зрения быстродействия пофиг.
Если у вас не стоит автоматическая компиляция, конечно (раньше она замедляла работу, даже если компилировать не нужно ничего).
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083723
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , потому и написал
krvsa типа быстрее грузится
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083892
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Я согласен с DAiMor, он же указал, что "проще писать когда в основном это HTML", так что вашим убеждениям, как мне показалось, это совсем не противоречит.
У вас код вторичен, данные первичны (т.е. вашу csp-станичку легче отдать дизайнеру на доработку), во втором вашем случае наоборот, этот код легче для осваивания разработчиком. Так что каждому своё :)

Вообще, CSP, конечно, это технология от Cache' ;)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083943
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, в общем если сказать проще то csp лучше для HTML дизайнера, а CLS для программиста
если код складывается в основном из HTML, до да проще его сделать в CSP
а вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37084041
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37084979
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaDAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
Простой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085337
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, что ж вы над людьми издеваетесь...
krvsa
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ClassMethod OnPageBODY() As %Boolean {
 Write "<BODY onload='document.fAbon.tCode.focus()'>"
 Write !,(..HyperEventBody())
 Write !,!
 If ((%request.Data("abon", 1 ))'="") {
     Set oAbon = ##class(ver.Abon).%OpenId((%request.Data("abon", 1 )))
 } Else {
     Set oAbon = ##class(ver.Abon).%New()
 }

используйте &html<> и &js<>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
ClassMethod OnPageBODY() As %Boolean {
 k args m args=%request.Data
 w ..HyperEventHead()
 &html<body onload='document.fAbon.tCode.focus()'>>
 s abon=$g(args("abon", 1 ))
 If abon'="" {
     s oAbon = ##class(ver.Abon).%OpenId(abon)
 } else {
     Set oAbon = ##class(ver.Abon).%New()
 }
 d ..wForm(.args)

 &html<<script language="javascript">
  // Обновить информацию
  function LoadInfo() {
	var obj=document.fAbon; obj.submit();
 }
 </script></body>>
 Q  1 
}

///Пишем что угодно, тестируем откуда угодно, переопределяем как угодно
ClassMethod wForm(ByRef args as %String="") as %Status {
 &html<<form>Insert your code here>
 d ..wTable(.args) ;и так далее
 &html<</form>
 >
}

CLS + :
единый синтаксис (никаких arguments="&ars:%String" и прочих "расширений")
регистрозависимые имена классов
полноценное тестирование любой части
обычное программирование на COS (метки в методе, например) без всяких "дырявых абстракций" в виде CSP и ЗЕН.
Кстати можно создать очень быстро создать их аналог ("просмотр другого кода") под себя ;)

СSP(ZEN) + : хоть и "дырявая", но все-таки абстракция. Разные вкусности в виде cspbind и zen-компонентов.
СSP(ZEN) - : чтобы вкусности получить придется изучить еще два языка (CSP, ZEN)
ZEN -: не на всех версиях будет работать

P.S но каждому свое, конечно...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085753
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintkrvsa, что ж вы над людьми издеваетесь...
Не понял почему это адресовано мне, если пример (cls), что я привёл, генерит Каше... Т.ч. прям в техподдержку ИС так и напиши:
- ИС, что ж вы над людьми издеваетесь...

Ну а далее потексту с примерами...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085754
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TurkПростой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
И в чем тут выигрыш cls vs csp?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085803
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaTurkПростой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
И в чем тут выигрыш cls vs csp?
Речь шла не о выигрыше, а о удобстве. CSP в указанном примере вряд ли получится сделать более "красивым", чем CLS.
Другой пример - комментарии в коде. Чаще всего нежелательна передача этих строк на клиентскую машину (в целях безопасности или экономии трафика).
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085807
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, не уходите от сути... Требовать наглядности от генератора несправедливо имхо, у него другие задачи.
Что более читабельно CSP или CLS? На чем у разработчика больше возможностей наглядно и удобно организовать свой код?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085819
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это дискуссия из серии: блочная верстка vs табличная ) имхо
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085879
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintkrvsa, не уходите от сути...
Я не ухожу, я тут. А вот твои укоры были не по адресу...

doublefintЧто более читабельно CSP или CLS?
Я таки считаю что в csp... Обратных примеров я не видел.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085881
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TurkРечь шла не о выигрыше, а о удобстве
Да как ниназови...

TurkCSP в указанном примере вряд ли получится сделать более "красивым", чем CLS.
Где примеры "красивого" и "некрасивого" аналога? Примеров таки все нет... Значит разговор "не предметный".

TurkДругой пример - комментарии в коде.
Примеры? Где они?
Сколько килобайт и какой секретной информации скрывается от "клиента"?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085889
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznauэто дискуссия из серии: блочная верстка vs табличная ) имхо
Там можно и нужно сочетать. Тут сочетать не получится, тут либо/либо...
Но как делать, кождый решает сам. Мне просто жутко интересно посмотреть именно "удобство" класса, а его так и не хотят продемонстрировать...

Я например жду демонстрацию такого типа:
- Вот как удобно в классе
- А вот неудобный аналог на csp

Для меня это будет минимум поучительно, а как максимум - можно взять на вооружение.

Пока кроме наследования никаких явных преимуществ мне не продемонстрировали... Но я это уравниваю простым инклюде в csp.

Пример превосходства doublefint над кащейским компилятором не всчет.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085958
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через csp практически невозможно отдать бинарный контент, так как вылезут пробелы и переводы строк, которые его испортят.
Через csp неудобно отдавать высокодинамичный контент, например через классы мы отдаем XML.
Через классы есть смысл делать библиотечные страницы, вызываемые из разных мест, так как у них постоянный url,
в отличии от csp, url которых может плавать.

Во всех остальных случаях использую csp, даже если это сыз такого вида.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<html>
<head>...</head>
<body>
<server>
..
</server>
</body>
</html>
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085976
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, каждому свое... :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
///Не тестировал, сорри
Class krvsa.clsPage Extends %CSP.Page {
Parameter CHARSET="utf-8";
Parameter TITLE = "Example cls for krvsa";
/// Вывод страницы
ClassMethod OnPage() As %Status {
 m args=%request.Data
 s abon=$g(args("abon", 1 )), type=$g(args("type", 1 )), dprt=$g(args("dprt", 1 ))
 s abonCode="" s:##class(ver.Abon).%ExistsId(abon) abonCode=##class(ver.Abon).NameGetStored(abon)
 s abonName=$$NameAbon^version(abonCode,dprt)
 
 &html<<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" />>
 d ..wTitle(.args)
 d ..wCSS(.args)
 w ..HyperEventHead()
 &html<</head><body>>
 d ..wForm(.args)
 d ..wJS(.args)
 &html<</body></html>>
 Quit $$$OK
}

///Название страницы
ClassMethod wTitle(ByRef args as %String) as %Status {
  w "<title>",..#TITLE,"</title>" Q $$$OK
}

///Подключаемые стили
ClassMethod wCSS(ByRef args as %String) as %Status {
  s href=$$MyCSS^version() 
  &html<<link rel="stylesheet" type="text/css" href="#(href)#" />
  <style type="text/css">
   table {border:none;border-collapse:collapse;width: 90 %;}
 </style>
  >
  Q $$$OK
}

///Выводим форму
ClassMethod wForm(ByRef args as %String) as %Status {
 &html<<form id="fAbon" name='fAbon' method='post' action='abon.csp'>
<!--Основные переменные-->
<input type='hidden' id="abon" name='abon' value='#(abon)#' />
<input type='hidden' id="type" name='type' value='#(type)#' />
<input type='hidden' id="dprt" name='dprt' value='#(dprt)#' />

<!--Таблица данных-->
<fieldset><legend>Абонент <span id="aName">#(abonName)#</span></legend>
<table id="tblData">
<tr>
 <td><label for="tCode">Код:</label></td> 
 <td><input type='text' id="tCode" name='tCode' value="#(abonCode)#" title='Код из дешифратора D_ABON'></td>
</tr>
</table>
</fieldset>
<!--Таблица кнопок-->
<fieldset>
<table id="tblButtons">
 <tr><td><input type='button' id="btnHome" value='На начало'/></td></tr>
 <tr><td><input type='button' id="btnExit" value='Выход'/></td></tr>
 <tr><td><input type='button' id="btnWrite" value='Записать'/></td></tr>
 <tr><td><input type='button' id="btnDel" value='Удалить'/></td></tr>
</table>
</fieldset>
</form>> 
}
///Клиентская логика
ClassMethod wJS(ByRef args as %String){
  s atype=$g(args("type", 1 ))
  &html<<script type="text/javascript">
  function $g(id){return document.getElementById(id);}
  function $$new(tagName){return document.createElement(tagName);}
  var $bind=("\v"=="v")?function(obj,evt,handler){ obj.attachEvent("on"+evt,handler);}
                      :function(obj,evt,handler){ obj.addEventListener(evt,handler,false);}
                      
  var $page={ //не засоряем пространство имен
    go: function(target){ var form=$g("fAbon"); form.target=target; form.submit();}
   ,focus: function(){ $g("tCode").focus(); }
   ,home: function(){ $page.go("info.csp");}
   ,exit: function(){ $page.go("abonall.csp?type=#(atype)#")}
   ,del: function(){ 
     if (!confirm("Удалить абонента?")) return;
     var id=$g("abon").value; 
     var res=#(..HyperEventCall("..Delete","id"))#; if (!res) return;
     $page.exit();
   }
   ,save: function(){ //
     var id=$g("abon").value, code=$g("tCode").value
     var dprt=$g("dprt").value, type=$g("type").value
     var callback="$page.set";
     var res=#(..HyperEventCall("..Save","id,code,dprt,type,callback"))#; if (!res) return false;
     return true;
   }
   ///Переустановит значения на клиенте после сохранения на сервере
   ,set: function(/*JSON server obj*/ аbonObj){ $g("abon").value=abonObj.id; $g("tCode").value=abonObj.code; }
  }
  
  //инициализация клиенткого WUI
  $bind(window,"load",function(){
    $bind($g("fAbon"),"submit",$page.save);  
    $bind($g("btnHome"),"click",$page.home);
    $bind($g("btnExit"),"click",$page.exit);
    $bind($g("btnWrite"),"click",$page.write);
    $bind($g("btnDel"),"click",$page.del);
    $page.focus();
  });
   
 </script>>  
}
///Удаление на сервере
ClassMethod Delete(id as %String,jsfunc as %String="alert") as %Boolean {
 s sc=##class(ver.Abon).%DeleteId(id) Q:sc  1 
 s err=$system.Status.GetOneErrorText(sc)
 w jsfunc,"(",..QuoteJS(err),");" 
 Q  0 
}

///Сохранение на сервере
ClassMethod Save(id as %String,code as %String, dprt as %String, type as %String, jsfunc as %String="alert") as %Boolean {
 s abon=##class(ver.Abon).%OpenId(id) s:'$IsObject(abon) abon=##class(ver.Abon).%New()
 s abon.Code=code, abon.dprt=dprt, abon.type=type, sc=abon.%Save()
 s err="" s:'sc err=$system.Status.GetOneErrorText(sc)
 w jsfunc,"({id:",..QuoteJS(abon.%Id()),",code:",..QuoteJS(abon.Code),"});"
 Q:sc  1  Q  0 
}
}

...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086004
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , и это типа удобнее и понятнее csp?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086008
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , а csp аналог этому у тебя будет какой?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086010
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Через csp практически невозможно отдать бинарный контент, так как вылезут пробелы и переводы строк, которые его испортят.
Через csp неудобно отдавать высокодинамичный контент, например через классы мы отдаем XML.
Тут да...
Добавлю еще что вебсервис также не организовать... Или это как раз твой второй пункт?


Блок А.Н.Через классы есть смысл делать библиотечные страницы, вызываемые из разных мест, так как у них постоянный url,
в отличии от csp, url которых может плавать.
А тут что-то яне понял... Чего там с урлом не так? Как он "плавает"?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086071
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
>Добавлю еще что вебсервис также не организовать... Или это как раз твой второй пункт?
вроде вебсервис частный случай обмена XML-документами :-)


>Как он "плавает"?
Когда открываемая страница в том же каталоге, что и текущая, то к ней можно обратиться так: "mypage2.csp"
Когда она в в подкаталоге от текущей, к ней можно обратиться так: "mydir/mypage2.csp"
Когда она в другом каталоге, то к ней можно обратиться примерно так: "../mydir2/mypage2.csp", а это неудобно, можно ошибиться
либо /myapp/mydir2/mypage2.csp, но я данном случае если вы на одном сервере захотите развернуть два приложения, вас ждет облом, так как имя приложения уже зашито в обращении.
Это тоже можно решить, вычисляя каждый раз изменившийся url, но это дополнительные замороки.
В отличии от csp, у класса всегда одинаковый url при вызове из любого места, и который корректно работает при смене имени приложения. Поэтому иногда есть смысл использовать класс для универсальных диалогов (календари и т.д.)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086154
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa doublefint, а csp аналог этому у тебя будет какой?

Посмотрите в начале темы, там некто под ником krvsa, приводит "корректное" сравнение наглядности csp кода и результатов его обработки генератором cls, демонстрируя торжество компилятора ИС над возможностями krvsa :)

krvsaЯ например жду демонстрацию такого типа:
- Вот как удобно в классе
- А вот неудобный аналог на csp

Это справедливо и конструктивно, я согласен. По мере возможности, буду приводить в этой ветке.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086171
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , про урл понял.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086209
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неудобно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<CSP:CLASS SUPER="%CSP.Page,MyApp.MyMethods" description="Этот атрибут уже не описан в документации. Что делать с многострочным комментарием? О боже, я не контролирую имя класса!!! Каким оно будет? У вас еще не было ошибки [Класс csp.melkimibukvami.cls уже существует] при импорте проекта или переименовании приложения? O_o Тогда мы идем к вам"/>
<!--
Это единственный известный мне способ задокументировать параметр класса.
Проблема только в том, что этот комментарий будет выводится каждому клиенту.
Но и это еще не все... А как же Класс - Переопределить - Параметры? :(
-->
<CSP:PARAMETER Name="CHARSET" Value="utf-8"/>
<!--
Вышеприведенный код после компиляции превратится во множество команд W !
И вы почти ничего не сможете с этим поделать (не жертвую читабельностью) 
Кстати, это неявное добавление символов станет дополнительной проблемой
,если вы, например, генерируете csv, rtf и т.д.
-->


удобно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
///Стандартный элемент проекта. Вы используете систему контроля версий? А зря.
///Имя класса точно известно, и регистрозависимо
///и не будет прыгать при переименовании приложение или файла.csp
///Документацию к классу можно оформить "как угодно"
///например,  см. <class>krvsa.anotherClass</class>
/Сlass krvsa.clsPage Extends (%CSP.Page,MyApp.MyMethods) {
  
   ///Используя Класс-Переопределить-Параметры находим такие, о которых даже не подозревали
   ///Спокойно документируем параметр, или читаем документацию к нему
   ///При этом на клиента ничего не будет отправлено, никаких $C( 13 , 10 ) или $C( 9 ) 
   Parameter CHARSET="utf-8";
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086363
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
едем дальше. CLS.Удобно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/// Опять документирование: методов <method>doSomething</method> 
/// и их параметров <var>args</var>, <var>when</var> 
/// Никогда не сдавали документацию по своему коду? 
ClassMethod doSomething(ByRef args as %String={"Hello:"_$h}, when as %Date={+$h}) as %Boolean {
  s $zt="errHandler" ;не используете обработку ошибок? А goto вместо for? ;)
  ;что-нибудь делаем
  Q  1  
errHandler
   s $zt="",$ze="" Q  0  
}
/// Эта документация не попадет на клиентский браузер
ClassMethod doSomething1(ByRef args as %String={"Hello:"_$h}, when as %Date={+$h}) as %Boolean { 

}
Готовы повторить на CSP не подсматривая?
CSP.Неудобно

CSP - это еще один язык. А некоторые вещи не найти в документации (если конечно ваш ник не servit ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<script type="cache" runat="server" method="doSomething" 
  arguments='&args:%String="Hello"_+$h,when:%Date=+$h' 
  returnType="%Boolean"
  description="Беда с документированием">
  
  ;я не знаю как в csp сделать метку, увы мне ;(

 Q  1 
  ;script><script - для подавления генерации команды w ! 
</script><script type="cache" runat="server" method="doSomething1" 
  arguments='&args:%String="Hello"_+$h,when:%Date=+$h' 
  returnType="%Boolean">
 Q  1   
</script>
Так что насчет наглядности, krvsa?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086430
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , я пока ничего поучительного и "выгодного" в этих примерах неувидел, т.ч. извини...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086474
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудобно: CSP "компоненты" - CSR. Это вообще совсем неудобно. Даже не буду приводить примеры. Еще один язык, со своими "тараканами". Отлаживать их - песня.
Удобно CLS: Обычный метод или класс. Можно даже не наследовать от %CSP.Page

Неудобно: CSP - оптимизация страниц. Не контролируете генерацию и вывод - не можете сжать и разнести html, js, css
Для каждой cspbind формы будет повторен типовой код проверки, сохранения, отображения, вывод ошибок.
Удобно: CLS - можете управлять любым аспектом вывода на страницу
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086486
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , не понятно про "разнос" html, js, css... Что имелось ввиду?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37086511
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, имелось в виду выполнение рекомендаций от анализатора YSLOW и применение инструментов
YUI compressor или google closure compiler
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087097
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , т.е. это все невозможно для обычного приложения (не csp)? Не пойму чем провинились js и css если "связались" с csp?

Я правда особой пользу в "компрессе" текстов не вижу... Потому как трафик больше нагружают картинки и всякое другое отображение... Нежели js и css.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087242
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, ну почему же. Возможно:
1.Создаем csp страницу, заполняем как умеем, сохраняем.
2.Включаем просмотр другого кода, копируем.
3.Создаем новый класс - наследник %CSP.Page.
4.Вырезаем все лишнее, затачиваем под себя.
5.Разбиваем страницу на части: js, css, html и динамическое содержимое.
6.Выносим js,css,html во внешние файлы и обрабатываем их утилитами.

Начиная с пункта 3 - обычное программирование на cls

Все зависит от ваших потребностей и возможностей, я так думаю. У меня большая часть страницы это js, а
основной интерфейс - список объектов и редактирование объекта прямо на списке или в списке.
А значит нет потребности в cspbind и т.д. Сохранить объект без cspbind я могу как минимум 3 способами.
Зачем мне тогда неудобства сsp?

P.S. Кстати картинки тоже оптимизируют. Например, CSS-спрайты
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087421
cache hit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefintедем дальше. CLS.Удобно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/// Опять документирование: методов <method>doSomething</method> 
/// и их параметров <var>args</var>, <var>when</var> 
/// Никогда не сдавали документацию по своему коду? 
ClassMethod doSomething(ByRef args as %String={"Hello:"_$h}, when as %Date={+$h}) as %Boolean {
  s $zt="errHandler" ;не используете обработку ошибок? А goto вместо for? ;)
  ;что-нибудь делаем
  Q  1  
errHandler
   s $zt="",$ze="" Q  0  
}
/// Эта документация не попадет на клиентский браузер
ClassMethod doSomething1(ByRef args as %String={"Hello:"_$h}, when as %Date={+$h}) as %Boolean { 

}


В данном случае на CSP немного спасают <csp:comment> и try/catch, а в остальном я согласен с doublefint
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087456
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну чтобы не было идиллии в использовании CLS
В cls
- невозможно использовать CSR (можно, конечно, сделать методами, но не всегда это эквивалетно)
- сложнее использовать гиперевенты, больше действий, проще ошибиться, реализация меняется между версиями каше.
- сложнее квотить строки, иногда вообще страшные конструкции получаются

Метки, кстати, в csp-методах есть
вот так обозначаются
:metka
Пока непонятно, что мешает вынести часть содержимого csp наружу?
Сложной логики в csp не должно быть вообще, так что и особо документировать обычно нет необходимости.
Вся механика должны быть в классах, csp - это оболочка.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087478
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint5.Разбиваем страницу на части: js, css, html и динамическое содержимое.
6.Выносим js,css,html во внешние файлы и обрабатываем их утилитами.
...
У меня большая часть страницы это js
Не понятно, зачем хранить на csp странице JS и css?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087479
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.csp - это оболочка.
Так про что и разговор!
А то тут каких-то молохов уже делают из этих страниц...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087483
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintКстати картинки тоже оптимизируют. Например, CSS-спрайты
Вот тут вообще не понял... Картинка она и в Африке картинка... Как её цсска-то "оптимизирует"?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087488
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintа основной интерфейс - список объектов и редактирование объекта прямо на списке или в списке.
А значит нет потребности в cspbind и т.д. Сохранить объект без cspbind я могу как минимум 3 способами.
Про формы редактирования интересно было бы посмотреть... Как ты организуешь редактирование экземпляров класса без cspbind? Потому как это в csp действительно практически "не программируемо"...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087513
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле мы тоже использует cspbind только в самых простых случаях.
Часто при создании объекта нужно делать какие-то дополнительные действия, проверки и т.д.
Можно, конечно, поизвращаться с триггерами, %OnValidate и т.д., но мы делаем проще: создаем методы Edit/Create/Delete, в которых все нужное делаем и отдаем информацию об ошибке, если она была.
Соответственно, при редактировании объекта вызываем эти методы простым гиперевентом.

И, эта, я не понял, что не программируемо в csp?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087563
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.И, эта, я не понял, что не программируемо в csp?
Приходится явно писать в csp странице

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<form name='fAdhoc' cspbind='oAdhoc' method='post' action='adhoc.csp' onsubmit='return Save()'>
<!--Основные переменные-->
<input type='hidden' name='adhoc' value='#(%request.Data("adhoc", 1 ))#'>

<!--Основная структурная таблица-->
<table width=' 100 %' border=' 0 '>
<tr>
<td valign='top' width=' 90 %'>
<h1>Элемент</h1>
<!--Таблица данных-->
<table border=' 0 '>
<tr>
<td>Название
<td><input type='text' name='tName' cspbind='Name' title='Название элемента досылки в формате $system.OBJ.*'>
<tr>
<td>Описание
<td><input type='text' name='tTitle' cspbind='Title' title='Описание или назначение элемента досылки '>
</table>
<td valign='top'>
<!--Таблица кнопок-->
<table border=' 0 '>
<tr>
<td><input type='button' value='На начало' onclick='Go("info.csp")'>
<tr>
<td><input type='button' value='Выход' onclick='Go("adhocall.csp")'>
<tr>
<td><input type='submit' value='Записать'>
<tr>
<td><input type='button' value='Удалить' onclick='DelAdhoc(#(%request.Data("adhoc", 1 ))#)'>
</table>
</table>
</form>
Все поля редактирования с привязкой к соответствующим полям экземпляра класса... Для следующего класса опять приходится все явно прописывать...
Т.е. у нас нет "общей" какой-то процедурки, которая могла бы сгенерить поля редактирования какого-то произвольного класса.
Ранее как-то пытался поспрашивать как такое можно сделать программно... Но предложения по такой реализации меня не впечатлили. Отказался от этой затеи...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087589
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и так,
минимальный дизайн придется делать, опять же, откуда брать селекторы.

Вот, посмотрите страничку, может пригодится. Делал тыщу лет назад, нам не пригодилась.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
<html>
<head>
</head>
<style>
body {font-family:Verdana,Arial;font-size: 15 ;}
th {background-color:#b0b0c0;}
.d {background-color:#e0e0e0;color=#a0a0a0}
.l {background-color:#CFD1DA;}
.b {background-color:#aAaFC1;}
.gray {background-color:#CFD1DA;border-style:none;}
.error {background-color:#FFCCCC;font-weight:bold;color:red}
td,th {border-style:none;text-align:left}
a {text-decoration:none;color:blue;}
</style>
<body>
<script language=cache runat=server>
 s classname=%request.Get("classname")
 s id=%request.Get("id")
 s addon=%request.Get("addon")
 
 s ClassList=##class(%ResultSet).%New("%ClassDefinition:ClassInfo")
 d ClassList.Execute()
 w "<form name=f1>"
 w "<table border=1><tr class=l>"
 w "<td><select name=classname>"
 while ClassList.Next() 
 	   {s clname=ClassList.Get("Name")
 	    if (ClassList.Get("Persistent")= 1 ) && ($f(clname,"%")= 0 )
 		      {w "<option ",$case(clname,classname:"selected",:""),">",clname,"</option>"
 		      }
 	   }
 d ClassList.%Close()
 w "<td><input type=text name=id value=",id," >"
 w "<td><input type=submit class=b value='==>'>"
 w "<input type=button class=b value='<==' onclick='history.back()'>"
 w "</table>"
 w "<form>"
 
 //Открываем объект по Id и classname
 q:(classname="")&&(addon="")
 if addon=""
     {s exist="",classlist="",ob=""
      x:id'="" "s exist=##class("_classname_").%ExistsId("_id_")"    //проверить, существует ли объект
      x:exist= 1  "s ob=##class("_classname_").%OpenId("_id_")"   //открыть объект
     } 
 else 
     {x addon
      s classname=ob.%ClassName( 1 )
      s exist= 1 
     }
 
 w "<table border=1 valign=top><th>Поле<th>Значение<th><th>Тип<th>Описание"
 s def=##class(%ClassDefinition).%OpenId(classname)
 s classlist=def.Super_","_classname
 d def.%Close()

 f i= 1 : 1 :$l(classlist,",")
     {s classname=$p(classlist,",",i)
      w "<tr><td>",classname
      
      s def=##class(%ClassDefinition).%OpenId(classname)      
      s key=""
      d def.Properties.GetNext(.key)  
      while key'="" 
         {s fieldname=def.Properties.GetAt(key).Name 
 	        s collection=def.Properties.GetAt(key).Collection
 	        s type=def.Properties.GetAt(key).Type
 	        s private=def.Properties.GetAt(key).Private 
 	        s description=def.Properties.GetAt(key).Description

 	        w "<tr class=l><td>",fieldname
 	        w "<td>"
 	        g:'exist next
 	        if private= 1  w "<i><закрыто>" g next                                               //закрытое поле	        
 	        if collection=""
 	            {s val=""
 	             x "s val=ob."_fieldname  
 	             s addon=##class(%CSP.Page).EscapeURL("s ob=##class("_classname_").%OpenId("_id_"),ob=ob."_fieldname)                                                         
 	             w ..DecodeValue(val,type,addon)
 	            }
 	        if collection="array"
 	            {s key2=""                                                       
 	             x "d ob."_fieldname_".GetNext(.key2)"
 	             w:key2="" "<i><пусто>"
 	             while key2'=""
 	                 {x "s val=ob."_fieldname_".GetAt(key2)"
 	                  s addon=##class(%CSP.Page).EscapeURL("s ob=##class("_classname_").%OpenId("_id_"),ob=ob."_fieldname_".GetAt("_key2_")")
 	                  w "<div>",key2,"->",..DecodeValue(val,type,addon),"</div>"
 	                  x "d ob."_fieldname_".GetNext(.key2)"
 	                 }
 	            }
:next 	        
 	        w "<td>",collection
 	        w "<td>",type
 	        w "<td><pre>",description,"</td>"
          d def.Properties.GetNext(.key)
         }
     }
 w "</table>" 
</script>
<script language=cache method=DecodeValue Arguments='data:%String,fieldtype:%String,addon:%String=""' returntype="%String">
 n def2,persistent,id2,ret,i
 if data="" q "<i><пусто>"                                                                               //пустое поле
 if (type="%Library.Date")||(fieldtype="%Date") q:data= 0  "<i><нулевая дата>"                             //нулевая дата
 if (type="%Library.Date")||(fieldtype="%Date") q:$zd(data, 3 ,, 4 )="" "<i><неправильная дата>("_val_")"    //нулевая дата
 if (type="%Library.Date")||(fieldtype="%Date") q $zd(data, 3 ,, 4 )                                             //дата
 if (type="%Library.List")||(fieldtype="%List") q "<i><список>"  

 //проверим, является ли тип хранимым классом
 s def2=##class(%ClassDefinition).%OpenId(fieldtype)
 s persistent=def2.Persistent
 s:persistent id2=data.%Id()
 d def2.%Close()	 
 if persistent q "<a href=Browser.csp?classname="_fieldtype_"&id="_id2_">"_id2_"</a>" 
 q:$e(type, 1 , 1 )'="%" "<a href='Browser.csp?addon="_addon_"'>OREF</a>"
 q "<b>"_val
</script>

</body>
</html>
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087622
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.- невозможно использовать CSR (можно, конечно, сделать методами, но не всегда это эквивалетно)
- сложнее использовать гиперевенты, больше действий, проще ошибиться, реализация меняется между версиями каше.
- сложнее квотить строки, иногда вообще страшные конструкции получаются


-Конечно имхо, но CSR лучше вообще не использовать. Нет отладки и тестирования
-Не столкнулся пока, наверно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<script type="text/javascript">
function serverCall(args) {
 var res=#(..HyperEventCall("..MyServerMethod","args"))#;
 //или
 var callback="alert"; 
 #(..HyperEventCall("..ServerAsyncMethod","args,callback", 1 ))#;
}
</script> 
- &js<> и &html<> существенно облегчают жизнь. Не так страшно как в режиме CodeMode=generator :)

P.S. за :metka спасибо. Где нашли? :)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087668
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Пока непонятно, что мешает вынести часть содержимого csp наружу?
Сложной логики в csp не должно быть вообще, так что и особо документировать обычно нет необходимости.
Вся механика должны быть в классах, csp - это оболочка.

- Использование cspbind и прочих макросов генератора
- Зависит от сложности интерфейса, не так ли?
- Наследники CSP.%Page - это классы. Обычные. Что мешает их нормально использовать? Правильно - CSP :)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087691
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я знаю, что гиперевенты можно так делать,
но все-таки немножко между версиями отличается, например, вроде упразднили ..HyperEventBody(),
да и вообще механизм работы гиперевентов дорабатывался.
&js,&html какая-то противоестественная вещь. Раз уж работаем в каше-методе, то надо на его языке и писать :-)

На csr пробовал что-то делать, не пошло.
Простые вещи можно и без них делать, сложные нужно в CodeMode=generator, а писать программу, которая должна сгенерить программу, которая должна сгенерить HTML+программы на яваскрите оказалось выше моих сил и я сдался. Вот там кстати с одними кавычками убийство.
Но используем библиотечку CSR-овскую, которая много автоматизирует.

:metka была всегда, я так понял, ее у Ptn и их компании подсмотрели.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087695
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Вот тут вообще не понял... Картинка она и в Африке картинка... Как её цсска-то "оптимизирует"?

Все изображения со страницы сливаются в одно. Большое изображение лучше жмется, получается с сервера за один запрос. Для отображения используют backround-position. яндекс в помощь
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087720
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintВсе изображения со страницы сливаются в одно. Большое изображение лучше жмется, получается с сервера за один запрос. Для отображения используют backround-position. яндекс в помощь
И чем тут CSP отличается от CLS?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087731
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПро формы редактирования интересно было бы посмотреть... Как ты организуешь редактирование экземпляров класса без cspbind? Потому как это в csp действительно практически "не программируемо"...


Так как бы приводил... На вашем же примере, в этой же теме...
Делать универсальную форму редактирования, по моему, не стоит.
Ничего хорошего из этого не выйдет. Независимо от используемой технологии.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087835
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintВсе изображения со страницы сливаются в одно. Большое изображение лучше жмется, получается с сервера за один запрос. Для отображения используют backround-position. яндекс в помощь
Таки я это все сразу и делаю... Это вроде как стандартные все действия...
Т.ч. ничего нового. И повторюсь что текстовый контент сейчас, вместе с коментариями, это ерунда по размерам в сравнении с картинками и пр. прибамбасами отображения.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087839
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Вот, посмотрите страничку, может пригодится. Делал тыщу лет назад, нам не пригодилась.
Вот и мне такое не дюже понравилось... Потому-то и пишем пока для каждой формы все руками...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37087846
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintДелать универсальную форму редактирования, по моему, не стоит.
Тогда чего так ругаешь cspbind?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37088082
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.И чем тут CSP отличается от CLS?
krvsaЭто вроде как стандартные все действия
Общение через форум имеет свои особенности. Например, можно потерять контекст обсуждения.
Вопрос про css спрайты от krsva был дополнительным и не имел непосредственного отношения к теме.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37088126
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsadoublefintДелать универсальную форму редактирования, по моему, не стоит.
Тогда чего так ругаешь cspbind?
krvsa Блок А.Н.Вот, посмотрите страничку, может пригодится. Делал тыщу лет назад, нам не пригодилась.

Вот и мне такое не дюже понравилось... Потому-то и пишем пока для каждой формы все руками..


А мне не нравится для каждой формы каждый раз писать все руками. Которая потом будет генерить что захочет.
Поэтому есть базовый класс интерфейса + типовой скрипт + типовой css. В наследниках я могу переопределить все.
В том числе, полностью контролировать вывод.
Делать супер-мега автомат для редактирования объектов любого класса не стоит.
А вот вспомогательные методы для типовых случаев... :)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37088198
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я знаю, что гиперевенты можно так делать,
но все-таки немножко между версиями отличается, например, вроде упразднили ..HyperEventBody()

Угу, это метод для устаревших браузеров, не поддерживающих XMLHttpRequest. Выводил в страницу IFRAME или java-апплет.
Сейчас в большинстве случаев достаточно перед body сделать w ..HypertEventHead()

Блок А.Н.:metka была всегда, я так понял, ее у Ptn и их компании подсмотрели.


Не слишком ли много особенностей за удобство использования cspbind?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089338
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже общими усилиями темку csp vs cls мы раскрыли.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089379
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, только такое ощущение, что по итогам обсуждения, что белое это черное

Я, кстати, пробовал собирать веб-содержимое из кирпичиков-классов. В принципе сделал, но что-то оказалось достаточно трудоемко, эксперимент меня не впечатлил (правда, там по другому бы и не получилось) Там были классы, генерящие яваскрипт, генерящий сами формы.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089644
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итоги что-ли. Неудобства CSP по сравнению с CLS:
1. Имена классов, формируемых из csp файлов, зависят от размещения файлов, имени приложения и не зависят от регистра
2. CSP-страница не является стандартным элементом проекта и хранится вне базы данных
3. Отсутствие поддержки в Студии при переопределении параметров, методов, свойств
4. В СSP используются специальные теги для определения наследования, методов и комментариев, а также не задокументированный синтаксис
- : для обозначение метки
- & для передачи аргумента по ссылке в методе
- аттрибут description="" для документирования классов и методов
- не используется {} для выражения, вычисляющего значение по умолчанию
5. CSP чувствительно к символам табуляции, пробелам и переносам строк.
После компиляции они превращаются в команды write c выводом соответствующих символов.
6. Ограничения в документировании (нет документирования параметров)
7. Использование стандартных CSP-тегов (cspbind) приводит к генерации методов,
выводящих не оптимизированные скрипты

Выводы:
В подавляющем большинстве случаев все перечисленные недостатки с лихвой покрываются
удобством от использования тега <csp:object> и аттрибута cspbind
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089748
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , своими "выводами" ты дюже принизил csp...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089787
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казалось бы задал простой вопрос :)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089801
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Он не принизил, он просто перечислил недостатки.
А вот Вам уже эти недостатки кажутся унизительными? ;)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089859
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не унизил, а принизил
т.е. выдал "слегка" однобокую картину.
автор1. Имена классов, формируемых из csp файлов, зависят от размещения файлов, имени приложения и не зависят от регистра
2. CSP-страница не является стандартным элементом проекта и хранится вне базы данных
3. Отсутствие поддержки в Студии при переопределении параметров, методов, свойств
4. В СSP используются специальные теги для определения наследования, методов и комментариев, а также не задокументированный синтаксис
- : для обозначение метки
- & для передачи аргумента по ссылке в методе
- аттрибут description="" для документирования классов и методов
- не используется {} для выражения, вычисляющего значение по умолчанию
5. CSP чувствительно к символам табуляции, пробелам и переносам строк.
После компиляции они превращаются в команды write c выводом соответствующих символов.
6. Ограничения в документировании (нет документирования параметров)
7. Использование стандартных CSP-тегов (cspbind) приводит к генерации методов,
выводящих не оптимизированные скрипты
2. CSP страница является стандартным элементом проекта, хоть и хранится на диске
3.4.6. Страница - оболочка отображения, механика работы приложения должна быть в классах.
Необходимость документировать CSP, использовать передачу по ссылке и т.п. говорят от перегруженной логике в CSP, что может свидетельствовать о неправильном дизайне системы.
5. HTML вообще малочувствителен к переносам строки, пробелам и т.п. В случаях необходимости полного контроля за содержимым (т.е. это уже не HTML), CSP использовать нельзя
7. Собственно, что напишете в CSR, то и попадет в CSP.

Перечисленные недостатки CSP в большинстве случаев являются несущественными,
зато CLS обладает своими недостатками, наиболее существенный из которых - необходимость держать в голове дополнительный уровень абстракции. Т.е пишем программу для генерации html и javascript, а не сам html и яваскрипт.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37089892
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.не унизил, а принизил
т.е. выдал "слегка" однобокую картину.
Поддержу такую формулировку.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090660
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позвольте не согласится:
Блок.А.Н.2. CSP страница является стандартным элементом проекта, хоть и хранится на диске
Не является, из-за пункта №1. Особенно проявляется при командной разработке и использовании систем контроля версий
Блок.А.Н. 3.4.6. Страница - оболочка отображения, механика работы приложения должна быть в классах.
Необходимость документировать CSP, использовать передачу по ссылке и т.п. говорят от перегруженной логике в CSP, что может свидетельствовать о неправильном дизайне системы.
Похоже, вы нашли еще недостатки csp:
8.CSP накладывает ограничения на архитектуру системы.
9.СSP не позволяет создавать сложные интерфейсы
Блок.А.Н. 5. HTML вообще малочувствителен к переносам строки, пробелам и т.п. В случаях необходимости полного контроля за содержимым (т.е. это уже не HTML), CSP использовать нельзя
10. К использованию CSP надо подходить с осторожностью
Блок.А.Н.7. Собственно, что напишете в CSR, то и попадет в CSP.
Вообще-то речь шла про стандартные теги - cspbind. Но и так тоже сойдет:
11. Для расширения CSP приходится использовать еще одну технологию - CSR, которая обладает рядом собственных недостатков
Блок.А.Н.CLS обладает своими недостатками, наиболее существенный из которых - необходимость держать в голове дополнительный уровень абстракции. Т.е пишем программу для генерации html и javascript, а не сам html и яваскрипт.
То есть просто пишем на страницу?!
Код: plaintext
1.
2.
3.
4.
5.
6.
 ClassMethod wBody() as %Status {
   w "<body>Привет ",$USERNAME,"!</body>"
 }
 ClassMethod wJS() as %Status {
   w "<sript type='text/javascript'>var $username='",$USERNAME,"';</script>"
 }
По-моему, наоборот:
12. CSP является дополнительным уровнем абстракции, который необходимо учитывать при создании приложения
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090702
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint8.CSP накладывает ограничения на архитектуру системы.
Дюже общё...

doublefint9.СSP не позволяет создавать сложные интерфейсы
Тут просто добил...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090710
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint11. Для расширения CSP приходится использовать еще одну технологию - CSR
Таки никто не заставляет её использовать... Можно обойтись простыми процедурками/программками...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090729
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsadoublefint11. Для расширения CSP приходится использовать еще одну технологию - CSR
Таки никто не заставляет её использовать... Можно обойтись простыми процедурками/программками...
На мой взгляд, CSR - это одно из самого вкусного в CSP.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090826
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я , а у doublefint совершенно противоположное мнение...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090836
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsadoublefint8.CSP накладывает ограничения на архитектуру системы.
Дюже общё...
Дюже общее возражение

Блок. А.Н.Необходимость документировать CSP, использовать передачу по ссылке и т.п. говорят от перегруженной логике в CSP, что может свидетельствовать о неправильном дизайне системы.
doublefint9.СSP не позволяет создавать сложные интерфейсы
krvsaТут просто добил...
Согласен, немного перебор. Но...
Если у меня сложный интерфейс - к нему может быть сложный многофункциональный контроллер,
который будет обращаться к модели, трактовать ответы и выдавать это в интерфейс.
Почему я должен разносить интерфейс и контроллер в разные классы? Во имя чего столько ограничений?
Что именно из технологии CSP способствует созданию сложного интерфейса?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090845
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкиньте вашу систему контроля версий. У нас все нормально с csp :-)
А одну csp одновременно двум людям править нет смысла.

В сsp не стоит делать сложных методов исходя из объектно-ориентированного подхода и принципа разделения данных и отображения, а вовсе не потому, что это невозможно. Я постоянно давлю на коллег, заставляя их методы из csp убирать в классы.

CSPBIND довольно ограниченная технология, но в некоторых простых случаях она помогает сэкономить время

нулевой уровень абстракции - это html
А там дальше уже выше
Вернее, это не уровень абстракции, это неподходящее слово, но в целом понятно.

В целом - в csp вы можете сделать все тоже, что и в классах
+ дополнительные вкусности и простота
- контроль контента (пробелы, переводы строки и т.д.), которые в большинстве случаев некритичны.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090854
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яНа мой взгляд, CSR - это одно из самого вкусного в CSP.
Но по сути, это обычный параметризированный метод в режиме генерации кода?
Почему именно CSR? С его отдельным синтаксисом, особенностями загрузки и отладки?
Ну понимаю krvsa без cspbind как без рук... Но CSR как самое вкусное... Уж очень специфическое блюдо
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090905
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintну яНа мой взгляд, CSR - это одно из самого вкусного в CSP.
Но по сути, это обычный параметризированный метод в режиме генерации кода?
Почему именно CSR? С его отдельным синтаксисом, особенностями загрузки и отладки?
Ну понимаю krvsa без cspbind как без рук... Но CSR как самое вкусное... Уж очень специфическое блюдо

Вообще говоря, csr это совсем не параметризованный вызов метода.
По сути это сам по себе параметризованный генератор методов и изменятель контента страницы, причем одна CSR может породить несколько методов. Инструмент мощный, но сложный. Не для всех, согласен.
Но кто-то (как мы) его просто использует, не создавая своих библиотек. Причем, в том, что мы используем, механизм отладки встроен в сами csr.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090906
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Выкиньте вашу систему контроля версий. ...
А одну csp одновременно двум людям править нет смысла.
Я как бы предупреждал, что каждому свое...
Выкинуть систему контроля версий, когда разработка web-системы
ведется двумя территориально-разнесенными коллективами разработчиков...
И дело даже не в одновременной правке...

Может проще сделать так:
Зайти в Студию, нажать Сtrl+N, написать имя класса и отнаследовать его %CSP.Page
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090948
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintБлок А.Н.Выкиньте вашу систему контроля версий. ...
А одну csp одновременно двум людям править нет смысла.
Я как бы предупреждал, что каждому свое...
Выкинуть систему контроля версий, когда разработка web-системы
ведется двумя территориально-разнесенными коллективами разработчиков...
И дело даже не в одновременной правке...

Может проще сделать так:
Зайти в Студию, нажать Сtrl+N, написать имя класса и отнаследовать его %CSP.Page
Че-то какая-то лисица и виноград :-)
У нас не получилось настроить контроль версий с csp - поэтому csp отстой, а отстой нам и даром не нужен :-)
Кстати, у вас разработчики на разных серверах работают что ли?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37090978
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Вообще говоря, csr это совсем не параметризованный вызов метода.
По сути это сам по себе параметризованный генератор методов и изменятель контента страницы, причем одна CSR может породить несколько методов. Инструмент мощный, но сложный. Не для всех, согласен.
Но кто-то (как мы) его просто использует, не создавая своих библиотек. Причем, в том, что мы используем, механизм отладки встроен в сами csr.
Ок, метод другого класса добавляющий методы к первому... Так лучше?
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37091005
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintну яНа мой взгляд, CSR - это одно из самого вкусного в CSP.
Но по сути, это обычный параметризированный метод в режиме генерации кода?
Почему именно CSR? С его отдельным синтаксисом, особенностями загрузки и отладки?
Ну понимаю krvsa без cspbind как без рук... Но CSR как самое вкусное... Уж очень специфическое блюдо
1) Ну как-бы собсно сам движок CSP в своей основе построен на CSR. Посмотрите класс %CSP.Rule и производные от него.
2) Это компонентный подход, что само по себе плюс. При правильном следовании компонентной методике большинство CSP страниц это просто наборчик соответствующих CSR на странице.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37091012
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. У вас не получилось настроить контроль версий с csp - поэтому csp отстой
У нас как раз-таки получилось... И именно поэтому разработчики работают каждый на своем сервере...
Но csp - это файл, который после загрузки компилируется в класс...
Блок А.Н. а отстой нам и даром не нужен :-)
Почему же отстой, крутейшая вещь!
С некоторыми, в принципе несущественными, ограничениями, по сравнению с CLS :)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37091053
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я Это компонентный подход, что само по себе плюс. При правильном следовании компонентной методике большинство CSP страниц это просто наборчик соответствующих CSR на странице.
В ближайших аналогах CSP, да и похоже вообще в веб-разработке, компоненты это все чаще js-библиотеки, которые сами рисуют на странице свой интерфейс. Остается сгенерить их настройки (параметры), организовать для них службы получения данных, соединить их обработчиками. HTML все меньше и меньше. В основном генерация JS. Зачем по каналу тянуть кб <html>
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37091220
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintну я Это компонентный подход, что само по себе плюс. При правильном следовании компонентной методике большинство CSP страниц это просто наборчик соответствующих CSR на странице.
В ближайших аналогах CSP, да и похоже вообще в веб-разработке, компоненты это все чаще js-библиотеки, которые сами рисуют на странице свой интерфейс. Остается сгенерить их настройки (параметры), организовать для них службы получения данных, соединить их обработчиками. HTML все меньше и меньше. В основном генерация JS. Зачем по каналу тянуть кб <html>
Не хотите генерить html - генерите ссылки на js. Мне например проще видеть тег
<app:jscripts />
который сам вставит и предусмотрит все что надо про js чем пачку тегов
<script language ....> с копипастом.
Пока не вижу как относится способ генерации html и ссылок на js к объему передачи.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37091333
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я, речь шла про что-то вроде этого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
ClassMethod OnPage() As %Status {
 &html<<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>#(..#CAPTION)#</title>
<link rel='stylesheet' href='css/redmond/jquery-ui- 1 . 7 . 2 .custom.css' type='text/css'/>
<link rel="stylesheet" href="css/ui.jqgrid.css" type="text/css" media="all"  />
</head><body>
  <table id="table"></table>
  <div id="tableCtrl"></div>>
  
  d ..wButtons()

  ;Вместо <app:jscripts />  А так как это базовая страница...
  
  #define JSINC(%src) w "<script type='text/javascript' src='",%src,"'></script>"
  $$$JSINC("js/jquery-1.3.2.min.js")
  $$$JSINC("js/jquery-ui-1.7.2.custom.min.js")
  $$$JSINC("js/i18n/grid.locale-ru.js")
  $$$JSINC("js/jquery.jqGrid.min.js")
  
  w "<script type='text/javascript'>"
  w "var page=document.page||{}; "
  w "page.colModel=[" d ..wJsColModel() w "];" 
  w "page.jsonurl='",..#JSONURL,"';"
  d ..wFormOptions()
  w "page.userSettingsUrl='csp.UserSettings.cls';"
  w "page.caption='",..#CAPTION,"';"
  w "page.height='",..#HEIGHT,"';"
  w "page.minwidth='",..#MINWIDTH,"';"
  w "page.maxwidth='",..#MAXWIDTH,"';"
  w "page.minheight='",..#MINHEIGHT,"';"
  w "page.maxheight='",..#MAXHEIGHT,"';"
  w "page.maxwidth='",..#MAXWIDTH,"';"
  w "page.minheight='",..#MINHEIGHT,"';"
  w "page.maxheight='",..#MAXHEIGHT,"';"
  w "page.backpage='",..#BACKPAGE,"';"
  w "</script>"
 &html<<script type="text/javascript" src="csp.face.js"></script>
</body></html>>
 Quit $$$OK
}
То есть самих html-тегов в теле почти нет. Максимум, начальные точки крепления для скрипт-компонентов.
В какой-то мере CSP vs CLS отражает сам процесс развития Web технологий.
Контент уже не такой статичный, больше динамики, все чище данные, меньше тегов.... Их почти нет...
...
Рейтинг: 0 / 0
83 сообщений из 83, показаны все 4 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / отличие CSP от CLS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]