Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание сложных(составных) контролов 
:(
    Опции темы
Mymik
Дата 15.5.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(SpaceSpace @  15.5.2007,  10:56 Найти цитируемый пост)
До тех пор, пока не изобрели мониторы с высотой в километр, я думаю
можно не боятся оверфлова из-за перегрузки, мы имеем дело всего лишь с визуализацией текстовых данных из БД, посредством Вью или репитера

а ты знаешь разницу между Server Side и Client Side ??? AFAIK, браузеры не держат в памяти весь документ.
А я говорил о Server Side. Компьютеры на хостинге тоже не всемогущие ;о)

Цитата(SpaceSpace @  15.5.2007,  10:56 Найти цитируемый пост)
Далее этим custom репитерам или грид вью указываем какой шаблон использовать.

Тогда за тебя уже все придумали. Эта штука называется Skin или Themes. 

Цитата(SpaceSpace @  15.5.2007,  10:56 Найти цитируемый пост)
Сам шаблон содержит весь дизайн и логику работы с БД(не доступа, а именно работы(constriants например))

Прямого доступа к СУБД у тебя никогда не будет. Всегда используются провайдеры для доступа к базе. Точнее для коннекта к базе. Констрейнты хранятся в СУБД и являются ее внутренней архитектурой.
А что касается логики работы или доступа. Ну-у-у-у. Вобщем-то уже давным-давно благодаря тому что asp.net может использовать бинарный код. Они хранятся с отдельных сборках... 
И вообще можно использовать ObjectDataSource для связи данных. 
Цитата(SpaceSpace @  15.5.2007,  10:56 Найти цитируемый пост)
Смысл в том, чтобы унифицировать использование репитеров или гридвью, и абстагироваться от слоя доступа к данным

 smile Repeater или DataList, или GridView/DataList они что, они не унифицированные ???  smile Ты к ним можешь прикрутить любой контейнер с данными.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
SpaceSpace
  Дата 16.5.2007, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 3
Всего: 10



2 Mymik

Полемика интересная получается smile 
К сожалению, самый большой недостаток людей заключается в том, что у каждого , абстрактно конечно, своя терминология и взгляд на мир вогкруг.
С твоей стороны, не очень красиво выглядит, что в своей аргументации используешь понятия, на правомерность которыйх я не посигал. smile 
Во- первых, что такое сайд и бесайд я в курсе, что такое AFAIK я в душе не представляю smile 
Во-вторых, шаблоны, ака templates используются по-умолчанию, т.к при выводе любой дата-строки существует шаблон вывода и вообще у каждого асп контрола есть шаблон вывода.
В третьих эти встроенные шаблоны меня есессно не устраивают
В четвертых, речь идет, опять же абстрактно,( боюсь задеть кого нить- своей кривой манипуляцией терминов)
о своего рода PageFactory, ControlFactory/
В пятых, повсеместен подход в разработке - ват я си ват ю гет, я имею в виду рапид средсва и методы, в которых пропагандируются разложение сложного на простое, но за счет этого дико увеличивается количество контента - исходных страниц и контролов, хотя можно было бы обойтись без некоторых ( экономия всего-лиш 20-30 %, ни на что большее не претендую, к тому же повышается требование к разработчику, так как maintanance таких проектов может усложниться)
В шестых, пробежимся по критике:
Skin или Themes - ни чего путного не скажу, признаю, не знаком, обязательно в ближайшее время ознакомлюсь
В седьмых нащет логики работы, не правильно выразился, - я имел всего-лишь то, что шаблон сам должен расставлять значения в свои поля(это самое узкое место), а не из-вне, ниже приведу пример.
В восьмых,
Цитата

Repeater или DataList, или GridView/DataList они что, они не унифицированные ???

ясен пень, что унифицированные
Но множество методов всегда приходится дописывать ручками - листать\не листать, видеть\не видеть, PageSize... РАЗ
Для каждого контента внутри листателя- своя логика работы - два
я сам всегда использовал репитеры, но ведь придумали же вью - три - это я к тому, что листателей несколько видов, несовместимых, а контент - шаблон- template - может быть один
Отсюда - унификация, как я говорил - есть способ абстрагироваться от типа листателя и вообще(если запись одна)
Есть такое понятие TemplateView- Мартин Фаулер - Архитектура корпоративных приложений,
А что есть паттерны? Уж точно не движение в сторону упрощения понимания.

Чтобы не показаться голословным, приведу пример того что получается, надеюсь услышать критику по примеру, а не по мне smile 

Вот у нас есть страничка, в ней контрол
Код

<%@ Page Language="C#" MasterPageFile="ап" AutoEventWireup="true" CodeBehind="MyTest.aspx.cs" Inherits="MyTest" Title="Untitled Page" %>
<%@ Register Src="TestList.ascx"  TagPrefix="uc2" TagName="BookList" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder" runat="server">
<uc2:BookList ID="bok" runat="server"  />
</asp:Content>

Вот у нас шаблон вывода, в нем Лэйбл
Код

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="TestControl"%>                            
asp:Label  ID="textLabel" runat="server" Text="dd"  />

А вот бихайнд код для этого шаблона вывода
Код

    public partial class TestControl : UserControl, ITemplate
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        void ITemplate.InstantiateIn(Control owner)
        {
// тут такая фишка, т.к контрол не стандартный, приходится его каждый раз подгружать
// отдаем в интерфейс ITemplate самого себя
            TestControl tc = (TestControl)Page.LoadControl("TestControl.ascx"); 
// имя ему для простоты поиска
            tc.ID = "template";
            owner.Controls.Add(tc);
        }

  /// <summary>
  /// Инициализируем поля 
  /// </summary>
// - параметр - datarow gridview
        public void Initiate(object dataItem)
        {
            DataRowView dataRowView = (DataRowView)(dataItem);
            string str = dataRowView.Row.GetChildRows("bla-bla")[0]["ColumnNane"].ToString();
            // а ЭТО -пресловутая логика работы, контрол сам знает что и куда
            textLabel.Text = str;
        }
    }


Далее Контрол - листатель
Причем заметьте, что в             <ItemTemplate /> пусто                       

Код

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestList.ascx.cs" Inherits="TestList" %>
<--лИСТАТЕЛЬ -->
<asp:GridView runat="server" ID="listGridView" AutoGenerateColumns="false" Width="100%" 
         AllowPaging="true" PageSize="5" OnRowDataBound="bookListGridView_RowDataBound">
    <PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" />  
   <Columns>
        <asp:TemplateField>
            <ItemTemplate >                       
            </ItemTemplate>
        </asp:TemplateField>    
    </Columns>
</asp:GridView>


Ну и код для него
Код

    public partial class TestList : System.Web.UI.UserControl
    {
       
        TestControl template1;
        protected void Page_Load(object sender, EventArgs e)
        {
            // это собственно шаблон для вывода в листателе
            template1 = (TestControl)Page.LoadControl("TestControl.ascx");
            // юзаем TemplateField
            System.Web.UI.WebControls.TemplateField tf = new TemplateField();
            // я думаю всем понятно что делаем
            tf.ItemTemplate = (ITemplate)template1;
            // добавляем шаблон к листателю
            listGridView.Columns.Add(tf);

            /* Прикрепление данных */
            listGridView.DataSource = FillElements(5);
            listGridView.DataMember = "Elements";
            listGridView.DataBind();
        }

        protected void bookListGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.DataItem != null)
            {
                TestControl tc = (TestControl)(e.Row.FindControl("template"));
                // ПЕРЕДАЕМ СТРОКУ ДАННЫХ В ШАБЛОН - ОН САМ РАЗБЕРЕТСЯ
                tc.Initiate(e.Row.DataItem);
            }
        }
    }


ну пока вот так вот, теперь можно и поговорить конкретнее smile 




--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Mymik
Дата 17.5.2007, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
К сожалению, самый большой недостаток людей заключается в том, что у каждого , абстрактно конечно, своя терминология и взгляд на мир вогкруг.

В жизни не подумал бы, что это недостаток :о)  smile 
Но не будем философствовать на тему сотворения мира.
Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
что такое AFAIK я в душе не представляю

As Far As I Know
Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
в которых пропагандируются разложение сложного на простое, но за счет этого дико увеличивается количество контента - исходных страниц и контролов, хотя можно было бы обойтись без некоторых

Ну а чем это плохо ??? разве разбивать сложные задачи на более простое это плохо ??? как бы стоит сайт по кирпичикам.  smile Ну а если при это увеличивается размер контента. Тогда это не грамотно спроектированные маленькие кирпичики.
Кстати, за счет того что задача разбивается на маленькие кирпичики часто очень легко можно достучаться до как-то шага сборки сайта, что дает преимущества в возможности повторного использования данного метода в других частях. Ну и разбиение все же помогает понимать код..
Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
я сам всегда использовал репитеры, но ведь придумали же вью - три - это я к тому, что листателей несколько видов, несовместимых, а контент - шаблон- template - может быть один

Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
А что есть паттерны? Уж точно не движение в сторону упрощения понимания.

Мне кажется предыдущие два высказывания противоречат друг другу. Как твое решение, так и паттерны, это очень узкоспециализированное направление. Просто паттерны упрощают работы с большим количеством классов. А твое решение будет упрощать работу с большим количеством листателей. Это действительно нужно при очень большом и громоздком портале. Где нужно изменить шаблон в одном месте и чтобы он опосля поменялся во многих местах. 

Цитата(SpaceSpace @  16.5.2007,  08:39 Найти цитируемый пост)
ну пока вот так вот, теперь можно и поговорить конкретнее smile 

Твое подход узкоспециализированный и может с большим успехом применяться в огромных проектах. Где по какой-то лени разработчики не пошли решением создания отдельных UserWebControl'ов (в которых будет прикрепляться к листателю DataSource). А решили усложнить себе задачу и клепать Template программно. 
Это твое решение :о). Паттерны тоже для маленький проектов нецелесообразны.

Кстати. Ты говорил, что при разбиении на простые вещи, код увеличивается... В том примере что привел ты, кода пока что больше чем если пойти обычным решением.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
SpaceSpace
Дата 17.5.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 3
Всего: 10



Mymik, спасибо за понимание.

Цитата

Ну а чем это плохо ??? разве разбивать сложные задачи на более простое это плохо ??? как бы стоит сайт по кирпичикам.   Ну а если при это увеличивается размер контента. Тогда это не грамотно спроектированные маленькие кирпичики.


Это не плохо. Я не говорил, что это плохо. Я лишь указываю на тот факт, что если предложить разработчику способ А, который заметно проще способа Б (имею ввиду переход например от ASP к ASP.NET, использование MasterPage и другие новшества вообще),
то у разработчика "выключается" думалка, что естественно, у всех так(не будем вдаваться в философию).

Рассмотрим текущую ситуацию:
Известен факт, что раньше было Write("<html>"), в некоторых случаях до сих пор в респонсе так и генерируется страница, потом был предложен подход Jsp, php, asp - шаблонный, 
все бы хорошо, но эти представления начали засирать кодом скриптлетов(и до сих пор засирают),
на это было придумано вспомогательные объекты - Behind код, имеется в виду,
все бы хорошо, smile 
но теперь ВСЁ делается (я не говорю категорично, а лишь привожу пример) по этому шаблону

В чем смысл идеи(может быть уже давно придуманной до меня, я не претендую на патенты smile )
в том чтобы чуть чуть отойти от методологии разработки веб, не делать всё в лоб,
(страница, -> вней контрол)
Цитата

Твое подход узкоспециализированный и может с большим успехом применяться в огромных проектах.

таких страниц, составных контролов накапливается куча ( в относительно больших проектах, согласен с тобой,Mymik)
Напрашивается идея освободиться от дублирующих друг друга страниц и контролов
Каким образом? программным by usage паттернов построителя и фабрики,
Которые какбы должны собирать контролы из множества других поменьше,
и ,соответственно, страницы из контролов
Вот это - проблема, надо думать
И уместен вопрос - а надо ли это, и где сдесь явная выгода?
Я интуитивно чувствую, что польза есть (согласен, могу ошибаться)
В чем сдесь подвох, по моему мнению?
В том, что девелоперы привыкли использовать построители и фабрики для невизуальных объектов,
а я в свою очередь оперирую как раз такими(в сущности xml-разметкой контролов),
которые отягощены behind кодом, своего рода такие "умные" картинки получаются

Есть смысл жить этой идее?
Или ну её и начать уже работать? smile 


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.