C>>Я уже совсем запутался. Можешь все-таки пример привести? Хотя бы на псевдокоде. EC>Ты таки заставил меня запустить Visual Studio EC>Типа так: EC>
EC>using System;
EC>namespace Cyberax
EC>{
EC> class Program
EC> {
EC> static void Main(string[] args)
EC> {
EC> Test2 t = new Test2();
EC> t.Action(1);
EC> }
EC> }
EC> class Test
EC> {
EC> public void Method1(int i)
EC> {
EC> }
EC> public void Method2(int i)
EC> {
EC> }
EC> }
EC> class Test2
EC> {
EC> private readonly Test _t = new Test();
EC> public Action<int> Action
EC> {
EC> get { return DateTime.Now.Second > 10 ? new Action<int>(_t.Method1) : new Action<int>(_t.Method2); }
EC> }
EC> }
EC>}
EC>
Пишу без IDE (Винду переустановил, блин), так что могут быть мелкие синтаксические ошибки:
public class Main
{
public static void main(String []args)
{
Test2 t=new Test2();
t.getAction(1).act();
}
}
class Test
{
public void method1(int i)
{
}
public void method2(int i)
{
}
}
interface Action<T>
{
void act(T param);
}
class Test2
{
private final Test t = new Test();
public Action<T> getAction()
{
if ((System.currentTimeMillis() % 10)==0)
return new Action<Integer>(){int act(){t.method1(param);}};
else
return new Action<Integer>(){int act(){t.method2(param);}};
}
}
Sapienti sat!
Re[54]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, AndrewVK, Вы писали:
C>>У меня вот тоже в кластере железо пару раз подглючивало (RAID-карты оказались кривыми). И ничего, все работало — клинеты даже ничего не замечали, все прозрачно делало failover. AVK>Так мы тоже можем failover сделать. Оплатишь?
Если вам нужно сделать failover — без проблем, мы вам готовы переписать сервер Только платить вы должны.
Кстати, какое отношение имеет железо к постоянным проблемам типа: "не могу подсоединиться к SQL-серверу" или "сборка не найдена"?
Sapienti sat!
Re[46]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, IT, Вы писали:
IT>>>Я уже у Глеба спрашивал, могу тебе задать тот же вопрос. Ты вообще в курсе зачем нужен DAL? C>>Вообще-то да. Поэтому у меня он сведен к минимуму IT>Если ты его сводишь к минимуму, продемонстрированными выше способами, то это собственного говоря то, откуда 10 лет назад начали бежать и в результате прибежали к такому понятию как DAL.
Фига.
Двухуровневые системы были плохими из-за прямой работы с данными в коде UI. У меня идет прямая работа с бизнес-объектами, а mapping'ом их на базу данных занимается Hibernate. Всякие security и прочее обеспечиваются с помощью interceptor'ов, тоже подключаемых к Hibernate.
Sapienti sat!
Re[55]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, Cyberax, Вы писали:
C>Если вам нужно сделать failover — без проблем, мы вам готовы переписать сервер Только платить вы должны.
Мы и сами перепишем. Если намек не понят, поясню: RSDN проект некоммерческий, поэтому никакого файловера на нем нет и не будет.
C>Кстати, какое отношение имеет железо к постоянным проблемам типа: "не могу подсоединиться к SQL-серверу" или "сборка не найдена"?
Прямое. Рвется постоянно связь между серверами из-за глюков сетевой карты на одном из них.
Здравствуйте, IT, Вы писали:
IT>Ответ неверный. DAL нужен для изоляции кода, работающего с БД от остальных частей приложения. Ключевое слово здесь изоляция. Проблема в том, что фактически мы пишем код на двух языках, при этом один из них, SQL, вообще никак не контролируется компилятором. DAL изолирует этот код и не позволяет ему расползаться по всему приложению.
"А Баба Яга против!" (с) мультфильм.
Я уже привел пример с Hibernate. Почти весь DAL концентрируется в отдельной библиотеке, в результате в основном коде можно не волноваться о мелочах. Статическая проверка тоже в большинстве случаев нормально делается.
IT>>>
IT>>>class UI
IT>>>{
IT>>> void OnLoad()
IT>>> {
IT>>> binder.List = from c in Customer select c;
IT>>> }
IT>>>}
IT>>>
GZ>>Пример достойный example или простейшего проекта. IT>О! Видишь что с людями делает декларативщина? Тебе этот код кажется примитивным? Правильно. А почему? Да потому что в нём нет ничего лишнего. Ни одного лишнего элемента. Учитывая, что в обычном коде мусора как правило больше половины, то смотря на такой код хочется зажмурится, как когда смотришь на яркий свет. Что-то тут не так, где-то нас обманывают. Только с декларативностью можно добиться такого примитивизма.
Ужжжас, а не пример.
Откуда мы берем соединение для работы с Cusomer'ом? Что будет при навигации по связям от него? Вернется ли нам disconnected dataset? Какой пользователь используется для работы с данными?
Sapienti sat!
Re[57]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, AndrewVK, Вы писали:
C>>Если вам нужно сделать failover — без проблем, мы вам готовы переписать сервер Только платить вы должны. AVK>Мы и сами перепишем. Если намек не понят, поясню: RSDN проект некоммерческий, поэтому никакого файловера на нем нет и не будет.
А как это связано? Slashdot вот тоже некоммерческий, а failover на нем есть. Если надо новый сервер — я думаю, что уж пара десятков человек скинется по $100.
C>>Кстати, какое отношение имеет железо к постоянным проблемам типа: "не могу подсоединиться к SQL-серверу" или "сборка не найдена"? AVK>Прямое. Рвется постоянно связь между серверами из-за глюков сетевой карты на одном из них.
Так поставьте SQL-сервер на одну машину с сайтом.
Sapienti sat!
Re[58]: Являются ли макросы свидетельством недостаточной выр
EC> return new Action<Integer>(){int act(){t.method2(param);}};
EC>
EC>Можешь эту строку пояснить? Особенно интересует выделенное. EC>Я правильно понял, что экземпляр интерфейса по new создать можно или это что-то другое?
Нет, ты создаешь анонимный класс, реализующий интерфейс Action.
Точно так же можно и расширять классы:
interface Action<T>
{
void act(T param);
void doNotAct(T param);
}
class ActionAdapter<T> implements Action<T>
{
void act(T param){} //Do nothing.void doNotAct(T param){}
}
class Test2
{
private final Test t = new Test();
public Action<T> getAction()
{
final int outerVar=123;
if ((System.currentTimeMillis() % 10)==0)
return new ActionAdapter<Integer>(){int act(){t.method1(param);}};
else
return new ActionAdapter<Integer>()
{
int someVar;
{
//Анонимный конструктор
someVar=Math.random();
if (someVar%2==0) someVar=outerVar; //Обращаемся к локальным переменным метода
}
int act(){t.method2(param);}
int doNotAct(){//Haha!}
};
}
}
Sapienti sat!
Re[59]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, Cyberax, Вы писали:
C>Нет, ты создаешь анонимный класс, реализующий интерфейс Action.
Я просто не в курсе был, что есть такой приятный сахар. Здорово.
Но с делегатами всё равно код короче. В большинстве случаев тип делегата можно не указывать.
Но в твоём случае нет платы за мультикастовость (которая есть в делегатах), что лучше.
Так, что, то на то.
now playing: Swayzak — Leisure Centre
Re[54]: Являются ли макросы свидетельством недостаточной выр
EvilChild wrote:
> C>Нет, ты создаешь *анонимный класс*, реализующий интерфейс Action. > Я просто не в курсе был, что есть такой приятный сахар. Здорово.
Не совсем уж и сахар. Главное — возможность определять классы внутри методов, притом с локальным конекстом. Как такое
делается в c#?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[60]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, EvilChild, Вы писали:
C>>Нет, ты создаешь анонимный класс, реализующий интерфейс Action. EC>Я просто не в курсе был, что есть такой приятный сахар. Здорово. EC>Но с делегатами всё равно код короче. В большинстве случаев тип делегата можно не указывать.
Тут по-хорошему, нужен вывод типов.
Overhead, кстати, не так напрягает — IDE помогает. В IDEA это пишется так new Action()-ctrl-shift-space, выбрать implement methods. И пишешь реализацию.
EC>Но в твоём случае нет платы за мультикастовость (которая есть в делегатах), что лучше. EC>Так, что, то на то.
Мультикастовость, кстати, в Java обычно тупо реализуют в вызывающем контейнере с помощью множества обработчиков.
Sapienti sat!
Re[52]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, AndrewVK, Вы писали:
AVK>Если ты не видишь, это не значит что проблем нет. Вот тебе псевдокод: AVK>
AVK>var x = GetProxy(...);
AVK>var y = x as Y;
AVK>Console.WriteLine(y == null); // false
AVK>y.AppendContract(typeof (Y));
AVK>var y = x as Y;
AVK>Console.WriteLine(y == null); // true
AVK>
AVK>Такое ни на каких отдельно сгенеренных проксях ты не сделаешь.
Классно. А где об этом можно почитать? В документации к RealProxy я не вижу возможности динамически добавлять реализуемые типы.
C>>А вообще, в Java есть http://java.sun.com/developer/products/jini/index.jsp — вроде бы функциональный аналог WCF (и появился, что характерно, раньше всего hype'а с WebServices). AVK>Если это функциональный аналог, зачем тогда Tango Project?
Для интероперабельности, у них же написано.
JINI, кстати, не особо популярен. Видимо, разработчики усвоили главное правило распределенного программирования: "Do not distribute".
C>>Вывода типов пока действительно нет — но Scala это исправляет AVK>А при чем тут Scala?
Есть мнение, что она может стать официальным продолжателям Java. Кстати, еще и JavaFX подкатывается.
Sapienti sat!
Re[61]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, ., Вы писали:
.>Главное — возможность определять классы внутри методов, притом с локальным конекстом. Как такое .>делается в c#?
Методы можно. Мне кажется этого достаточно, если знаешь когда нет, то приведи пример.
now playing: Etienne De Crecy — Fuck
Re[61]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, Cyberax, Вы писали:
C>Тут по-хорошему, нужен вывод типов.
Он в каком-то виде присутствует, просто в том случае компилятор почему-то не может.
C>Мультикастовость, кстати, в Java обычно тупо реализуют в вызывающем контейнере с помощью множества обработчиков.
А можешь привести минимальный пример реализации мультикастового события? Там контейнер обработчиков вручную ведётся?
now playing: Adam Freeland — Silverlake Pills
Re[61]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, ., Вы писали:
.>Не совсем уж и сахар.
Насколько я знаю, компилятор создаст скрытый класс для твоего анонимного класса.
Если это так, то это сахар в чистом виде.
now playing: Kim — By The Time They Reach You (Bagraiders Mix)
Re[53]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, Cyberax, Вы писали:
AVK>>А при чем тут Scala? C>Есть мнение, что она может стать официальным продолжателям Java. Кстати, еще и JavaFX подкатывается.
Т.е. санки всерьёз ею заинтересовались?
now playing: Kim — By The Time They Reach You (Bagraiders Mix)
Re[47]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, Cyberax, Вы писали:
C>Двухуровневые системы были плохими из-за прямой работы с данными в коде UI.
Ещё раз специально для самых одарённых. Проблемы работы с данными в коде UI нет, так же как и нет проблемы при чтении этих данных, например, из коллекции сериализованных объектов. Проблема в том, что работа ведётся с нетипизированными данными. В этом случае у нас пропадает контроль со стороны компилятора. Постарайся понять эту разницу и не путать причину и следствие.
C>У меня идет прямая работа с бизнес-объектами, а mapping'ом их на базу данных занимается Hibernate. Всякие security и прочее обеспечиваются с помощью interceptor'ов, тоже подключаемых к Hibernate.
В твоём примере ты делаешь точно тоже, что делалось 10 лет назад — ты используешь нетипизированную работу с данными.
Если нам не помогут, то мы тоже никого не пощадим.
Re[62]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, EvilChild, Вы писали:
.>>Не совсем уж и сахар. EC>Насколько я знаю, компилятор создаст скрытый класс для твоего анонимного класса. EC>Если это так, то это сахар в чистом виде.
Не совсем, там еще пара хаков в JVM есть для того, чтобы это все работало
А так да, по большей части сахар.
Sapienti sat!
Re[54]: Являются ли макросы свидетельством недостаточной выр
Здравствуйте, EvilChild, Вы писали:
AVK>>>А при чем тут Scala? C>>Есть мнение, что она может стать официальным продолжателям Java. Кстати, еще и JavaFX подкатывается. EC>Т.е. санки всерьёз ею заинтересовались?
Намного лучше: IDEA'вцы http://plugins.intellij.net/preview/popup/?sid=370&pid=1347
Исторически так сложилось, что от сантехники следуют за Java community, откуда и приходят все интересные идеи.