pitch Написал:Всем привет, есть предложение создать серверный двиг(нормальный) с использованием ORM(JPA,Hibernate), XoRM(JAXB,Xstream), Spring, SocketAPI Netty и тд. просто глядя на код l2j, хочется расстрелять тех, кто это писал. Если есть желающие с отменным знанием J2EE, Spring, Orm. Можно попробовать сделать лучше чем есть. Разработка закрытая.
как вариант:
DI/AOP - guice, NIO - netty
dao - склоняюсь в сторону jdbc (пул + кэш + ap. dbutils)
data - поддержка любого вида загрузки - jaxb/db
структура проекта:
-commons
-gs-api
-ls-api
-gs-l2/aion
-ls-l2/aion
правила:
- вынос части игрового функционала в API - любая игра (l2/aion/tera) содержит квесты/скилы/аукцион и т.д. Различия в пакетах и последовательности действий - реализуется на нижнем уровне.
- каждый функционал в идеале не зависит от другого (движок квестов можно включить/выключить убрав загрузку одного модуля Guice)
- запрет на DI после старта или в редких исключениях (бережем cpu)
- горячая перезагрузка только данных (перезагрузка целых модулей используя свои CL или даже OSGI дает неоправданную сложность, на мой взгляд)
- commons/api предоставляют интерфейсы как основу для функционала - это позволяет биндить к любой реализации вплоть до хардкодного дао в тестах:
Код:
public class DummyAccountDAO implements AccountDAO {
@Override
public Account loadAccount(String name) {
Account account = new Account(1);
account.setName(name);
account.setPasswordHash(name);
account.setStatus(0);
return account;
}
}
- никаких статических сервисов
в целом это все позволит в будущем не писать с нуля сервер для новой игры.
проблемы: имея такой не кислый уровень абстракции очень трудно найти подходящую команду или из-за разного видения на конечный продукт разработка может зайти в тупик.