Чтобы сфокусироваться на конкретном вопросе ("преимущества Классика по сравнению с.Net"), существует только две вещи, я могу думать о Классике, делает это.Net не будет:
1) Включает. Они просто не работают как Вы, ожидают в ASP.NET. Конечно, ASP.NET обеспечивает намного лучшие способы выполнить то же самое, но это - все еще что-то вроде потери и может сделать миграцию старого сайта к.Net болью.
2) ASP.NET не выйдет за предел корневой папки для приложения. Где я в, у нас есть довольно сложная интранет, это - все еще главным образом классический ASP с поверхностным знанием.Net приложений тут и там, поскольку вещи обновляются или новый добавленный материал. Было бы хорошо быть в состоянии продолжить одну копию общего кода довольно высоко в иерархии папок, но все еще иметь каждое отдельное приложение, изолированное к своему собственному VD. Но тогда, это - то, что управление исходным кодом для, так это не имеет большого значения.
Для меня, самым большим преимуществом, перемещающимся от Классического ASP и ASP.NET до сих пор, является IDE. Настолько хорошо быть в состоянии щелкнуть правой кнопкой по вызову функции и выбрать "Go to Definition" вместо того, чтобы иметь необходимость вырыть вокруг для нахождения файла, где функция на самом деле реализована. Огромное средство экономии времени. И поддержка intellisense и безопасность типов, когда вызывание функций является благом также.
Это - довольно старый вопрос. Я предполагаю, что никто больше не заботится об этом. Но я хотел бы отправить свой подход в случае, если это будет полезно кому-то.
Используя мой подход, можно записать обработчик событий нажатия кнопки 'классическим способом', точно так же, как как Вы сделали это в VB или MFC ;)
предположим, что у нас есть класс для рамочного окна, которое содержит 2 кнопки:
class MainWindow {
Jbutton searchButton;
Jbutton filterButton;
}
можно использовать мой класс 'маршрутизатора' для маршрутизации события назад к классу MainWindow:
class MainWindow {
JButton searchButton;
Jbutton filterButton;
ButtonClickRouter buttonRouter = new ButtonClickRouter(this);
void initWindowContent() {
// create your components here...
// setup button listeners
searchButton.addActionListener(buttonRouter);
filterButton.addActionListener(buttonRouter);
}
void on_searchButton() {
// TODO your handler goes here...
}
void on_filterButton() {
// TODO your handler goes here...
}
}
Вам нравится он? :)
, Если Вы любите этот путь и ненавидите анонимный подкласс Java путь, затем Вы так же стары как я. Проблема 'addActionListener (новый ActionListener {...})' то, что это сжимает все обработчики кнопок в один внешний метод, который заставляет программу выглядеть соединенной проводом. (в случае, если у Вас есть много кнопок в одном окне)
Наконец, класс маршрутизатора в ниже. Можно скопировать его в программу без потребности в любом обновлении.
Всего одна вещь упомянуть: поля кнопки и методы обработчика событий должны быть доступны для этого класса маршрутизатора! К проще говоря, при копировании этого класса маршрутизатора в том же пакете программы поля кнопки и методы должны быть доступными для пакета. Иначе они должны быть общедоступными.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ButtonClickRouter implements ActionListener {
private Object target;
ButtonClickRouter(Object target) {
this.target = target;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
// get source button
Object sourceButton = actionEvent.getSource();
// find the corresponding field of the button in the host class
Field fieldOfSourceButton = null;
for (Field field : target.getClass().getDeclaredFields()) {
try {
if (field.get(target).equals(sourceButton)) {
fieldOfSourceButton = field;
break;
}
} catch (IllegalAccessException e) {
}
}
if (fieldOfSourceButton == null)
return;
// make the expected method name for the source button
// rule: suppose the button field is 'searchButton', then the method
// is expected to be 'void on_searchButton()'
String methodName = "on_" + fieldOfSourceButton.getName();
// find such a method
Method expectedHanderMethod = null;
for (Method method : target.getClass().getDeclaredMethods()) {
if (method.getName().equals(methodName)) {
expectedHanderMethod = method;
break;
}
}
if (expectedHanderMethod == null)
return;
// fire
try {
expectedHanderMethod.invoke(target);
} catch (IllegalAccessException | InvocationTargetException e) { }
}
}
я - новичок в Java (не в программировании), поэтому возможно, в вышеупомянутом коде существует что-либо несоответствующее. Рассмотрите его перед использованием его.