Существует два основных подхода к бизнес-правилам при разработке вашего домена.
1.) Доменные объекты являются базовыми POCO / DTO с. И вы передаете их доменным службам. Эти сервисы могут быть такими же простыми, как другой класс, или они действительно могут быть реальными сервисами, расположенными на другом сервере.
var user = repository.Find(x => x.UserName == userName);
if (userLogonService.IsValidUser(user, password)) {
userLogonService.UpdateUserAsLoggedOn(user);
}
repository.SaveChanges();
2.) Доменные объекты содержат свою собственную логику работы. Это ближе к тому, что последуют многие паттерны MVC. И так как вы спросили, это модель, которую я предпочитаю.
var user = repository.Find(x => x.UserName == userName);
if (user.CheckPassword(password)) {
user.LogOnNow();
}
repository.SaveChanges();
Оба являются полностью действительными шаблонами. # 1 имеет отдельный уровень бизнес-операций, но страдает от модели анемичной области . # 2 может привести к большим объектам домена, если ваш домен начинает усложняться, или если модель может делать много вещей.
Oven.Bake (myPizza) против myPizza.Bake ()
Я в основном согласен. Есть ли у вас единая служба Духовки, или у вас есть десятки доступных печей, которые хранятся в хранилище духовок, где духовка - это просто еще один домен? В # 2 печь является частью домена. То, как я склонен заниматься предметным моделированием, большинство существительных являются предметными сущностями , если только вы не уверены на 100%, что это именно то, что нужно.
Но что-то случается с пиццей, когда она выпекается.
interface ICanBeBaked {
int BakeMinutes { get; }
int BakeTemp { get; }
void Bake();
}
class Pizza : ICanBeBaked {
int BakeMinutes { get { return 15; } }
int BakeTemp { get { return 425; } }
void Bake() {
// melt cheese!
this.isBaked = true;
}
}
class Oven {
void Bake(ICanBeBaked thingToBake) {
// set the temp, reserve this oven for the duration, etc.
thingToBake.Bake();
}
}
Возможно, самым простым было бы использовать mysqldump для выгрузки необработанного SQL из вашей базы данных MySQL в текстовый файл, а затем использовать sqlite3_exec () функция для выполнения этого SQL для заполнения базы данных SQLite.
Вы можете использовать пробную версию http://www.sqlmaestro.com/products/sqlite/datawizard/
. Она полностью функциональна в течение 30 дней.
Вы смотрели этот Perl-скрипт ? Я не использовал его - просто произвел быстрый поиск миграции mysql на sqlite, и он сразу всплыл.
Изменить (после того, как вы ответили на мой комментарий):
Обратное направление рассматривается здесь .
Если вы собираетесь делать это неоднократно и если должны произойти изменения структуры данных, возможно, вам будет лучше использовать что-то вроде Django (хотя и очень хакерским способом). С его помощью я бы:
# This three lines are done once
django-admin.py startproject mymigrationproject
cd mymigrationproject
./manage.py startapp migration
# The following lines you repeat each time you want to migrate the data
edit settings.py and make the changes to connect to MySQL
./manage.py inspectdb > ./migration/models.py
edit ./migration/models.py to reorder tables (tables in which other tables depend on top)
mkdir fixtures
./manage.py dumpdata migration > ./fixtures/data.json
edit settings.py and make the changes to connect to SQLite
./manage.py syncdb
./manage.py loaddata ./fixtures.data.json
Существует бесплатный продукт ETL, который можно использовать для миграции данных из одной БД в другое. Посмотрите: http://www.talend.com/index.php
Удачи!
Вы можете получить драйверы ODBC для Mac OS X от Actual Technologies.
Для подключения к MySQL вам потребуется их драйвер ODBC для баз данных с открытым исходным кодом:
http://www.actualtech.com/product_opensourcedatabases.php
( Отказ от ответственности: я являюсь автором SQLite Migrator)