Сообщение Re[3]: Factory pattern от 31.01.2017 10:28
Изменено 31.01.2017 10:57 ·
Re[3]: Factory pattern
Здравствуйте, Gattaka, Вы писали:
S>>Во всех трех одновременно и безусловно? Или либо в одной, либо в другой, либо в третьей в зависимости от некоторых условий?
G>Давай рассмотрим оба варианта.
Это довольно разные варианты. Во втором случае просто сохраняешь и всё. В первом случае... а что если в двух базах сохранилось, а в третей — constraint какой-нибудь упал или место кончилось? Откатывать всё или надеяться на авось? Нужен поди какой-нибудь 2PC. Или сделать одну из БД "главной", работа будет только с главной БД, а остальные две просто синхронизируются в фоне.
G>>>Но как быть с обновлением и удалением?
S>>Наверное так же как и с сохранением... нет?
G>Ну вот об этом и вопрос. Если создание сущности абстрагируется особым паттерном — фабрика, то почему нет паттерна для обновления или удаления?
Ты путаешь. Фабрика — для создания инстансов класса. А бд это копирование данных класса из/в внешнего хранилища — persistence.
Для доступа к базам данных есть паттерны DAO, repository, ORM. Например:
И тут же можно размножать:
S>>Во всех трех одновременно и безусловно? Или либо в одной, либо в другой, либо в третьей в зависимости от некоторых условий?
G>Давай рассмотрим оба варианта.
Это довольно разные варианты. Во втором случае просто сохраняешь и всё. В первом случае... а что если в двух базах сохранилось, а в третей — constraint какой-нибудь упал или место кончилось? Откатывать всё или надеяться на авось? Нужен поди какой-нибудь 2PC. Или сделать одну из БД "главной", работа будет только с главной БД, а остальные две просто синхронизируются в фоне.
G>>>Но как быть с обновлением и удалением?
S>>Наверное так же как и с сохранением... нет?
G>Ну вот об этом и вопрос. Если создание сущности абстрагируется особым паттерном — фабрика, то почему нет паттерна для обновления или удаления?
Ты путаешь. Фабрика — для создания инстансов класса. А бд это копирование данных класса из/в внешнего хранилища — persistence.
Для доступа к базам данных есть паттерны DAO, repository, ORM. Например:
interface MyEntityDao
{
void insert(MyEntity entity);
void update(MyEntity entity);
void delete(MyEntity entity);
}
...
class GalaxyMyEntityDao implements MyEntityDao
{
@Override void insert(MyEntity entity) {galaxyConnection.doInsert(...entity...);}
...
}
class JdbcMyEntityDao implements MyEntityDao
{
@Override void insert(MyEntity entity) {jdbc.execute("INSERT INTO MY_ENTITY_TABLE(...)...", ...entity...);}
...
}
...
И тут же можно размножать:
class MultipleStoreMyEntityDao implements MyEntityDao
{
GalaxyMyEntityDao galaxy;
JdbcMyEntityDao jdbc;
OneCMyEntityDao oneC;
@Override void insert(MyEntity entity)
{
// надо ещё добавить правильную обработку исключений.
galaxy.insert(entity);
jdbc.insert(entity);
oneC.insert(entity);
}
}
Re[3]: Factory pattern
Здравствуйте, Gattaka, Вы писали:
S>>Во всех трех одновременно и безусловно? Или либо в одной, либо в другой, либо в третьей в зависимости от некоторых условий?
G>Давай рассмотрим оба варианта.
Это довольно разные варианты. Во втором случае просто сохраняешь и всё. В первом случае... а что если в двух базах сохранилось, а в третей — constraint какой-нибудь упал или место кончилось? Откатывать всё или надеяться на авось? Нужен поди какой-нибудь 2PC. Или сделать одну из БД "главной", работа будет только с главной БД, а остальные две просто синхронизируются в фоне.
G>>>Но как быть с обновлением и удалением?
S>>Наверное так же как и с сохранением... нет?
G>Ну вот об этом и вопрос. Если создание сущности абстрагируется особым паттерном — фабрика, то почему нет паттерна для обновления или удаления?
Ты путаешь. Фабрика — для создания инстансов класса. А бд это копирование данных инстанса из/в внешнего хранилища — persistence.
Для доступа к базам данных есть паттерны DAO, repository, ORM. Например:
И тут же можно размножать:
S>>Во всех трех одновременно и безусловно? Или либо в одной, либо в другой, либо в третьей в зависимости от некоторых условий?
G>Давай рассмотрим оба варианта.
Это довольно разные варианты. Во втором случае просто сохраняешь и всё. В первом случае... а что если в двух базах сохранилось, а в третей — constraint какой-нибудь упал или место кончилось? Откатывать всё или надеяться на авось? Нужен поди какой-нибудь 2PC. Или сделать одну из БД "главной", работа будет только с главной БД, а остальные две просто синхронизируются в фоне.
G>>>Но как быть с обновлением и удалением?
S>>Наверное так же как и с сохранением... нет?
G>Ну вот об этом и вопрос. Если создание сущности абстрагируется особым паттерном — фабрика, то почему нет паттерна для обновления или удаления?
Ты путаешь. Фабрика — для создания инстансов класса. А бд это копирование данных инстанса из/в внешнего хранилища — persistence.
Для доступа к базам данных есть паттерны DAO, repository, ORM. Например:
interface MyEntityDao
{
void insert(MyEntity entity);
void update(MyEntity entity);
void delete(MyEntity entity);
}
...
class GalaxyMyEntityDao implements MyEntityDao
{
@Override void insert(MyEntity entity) {galaxyConnection.doInsert(...entity...);}
...
}
class JdbcMyEntityDao implements MyEntityDao
{
@Override void insert(MyEntity entity) {jdbc.execute("INSERT INTO MY_ENTITY_TABLE(...)...", ...entity...);}
...
}
...
И тут же можно размножать:
class MultipleStoreMyEntityDao implements MyEntityDao
{
GalaxyMyEntityDao galaxy;
JdbcMyEntityDao jdbc;
OneCMyEntityDao oneC;
@Override void insert(MyEntity entity)
{
// надо ещё добавить правильную обработку исключений.
galaxy.insert(entity);
jdbc.insert(entity);
oneC.insert(entity);
}
}