the-cure / the-cure
对您的领域逻辑影响最小的数据映射器。
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 11:46:51 UTC
README
一个具有最小领域逻辑影响的数据映射库。简单来说,这是一个用于编写PHP应用程序模型的库,将它们映射到数据存储(如MongoDB)并针对模拟数据存储进行单元测试的库。
这个库是在多个前迭代的基础上出现的,包括 beautiful/domain,以及对单元测试活动记录模式的挫败感。
用PHP编写,必须使用5.3或更高版本。测试需要Kohana 3.3框架来自动加载类和配置管理。Kohana作为子模块包含在内。
安装
the-cure可以作为composer包使用,因此您可以将其作为依赖项添加。
{ "require": { "php": ">=5.3.2", "the-cure/the-cure": ">=0.2.1" } }
或者您可以从GitHub下载最新的zip文件
成分
在我们进入CRUD之类的功能之前,让我们解释一下治愈方法的几个成分。
模型
在治愈中,我们使用一个名为模型(model)的类来描述领域逻辑。您的应用程序中的模型将代表用户、博客文章、宇宙飞船或任何与您的或您老板的业务有关的事物。
治愈提供了两个基本模型。以下是一个示例,第二个模型更像是ORM(对象关系映射)模型,TheCure\Models\Magic
<?php namespace Models; use TheCure\Lists\AttributeList; use TheCure\Attributes\Field; use TheCure\Relationships\HasManyRelationship; class User extends \TheCure\Models\MagicModel { public static function attributes() { return new AttributeList( new Field('name'), new HasManyRelationship( 'friends', array('mapperSuffix' => 'User'))); } } ?>
Models\User
类扩展提供了每个字段的getter/setter方法以及更多与关系相关的方法。上面的示例包括一个 TheCure\Relationships\HasMany
,它为此 friends
集合添加了查找、添加和删除其他 User
模型的功能。
映射器
拼图中第二块是映射器。这些类描述了将您的模型持久化到数据库、平面文件、JSON、S3或任何其他存储的行为。目前,治愈提供了两个映射器,一个用于MongoDB,另一个用于单元测试的模拟映射器。
由于 TheCure\Mappers\Mongo
包含足够的行为来让我们开始,我们可以简单地扩展这个类,并在下面的示例中将其留空。
<?php namespace Mappers\Mongo; class User extends \TheCure\Mappers\MongoMapper {} ?>
说明
现在我们已经组装了一些成分,让我们来看看如何使用它们的说明。
我们创建了一个容器,它负责创建与MongoDB连接的映射器对象。
<?php $container = new TheCure\Container('Mongo'); ?>
我们获取用户映射器,这将用于创建新的用户模型以及稍后存储它。
<?php $mapper = $container->mapper('User'); // => Mappers\Mongo\User ?>
并创建一个新的用户模型来表示一个人。
<?php $user = $mapper->model(); // => Models\User ?>
将模型名称设置为 "Luke",因为这是一个好名字。
<?php $user->name('Luke'); ?>
并将其持久化到MongoDB。如您所见,API相当简单,易于理解。
<?php $mapper->save($user); ?>
使用 ::find_one()
查找相同的模型。
<?php $userCopy = $mapper->findOne(array('name' => 'Luke')); // Note that these are the exact same object var_dump($user === $userCopy); ?>
创建另一个名为 "Jake" 的用户。
<?php $friend = $mapper->model(); $friend->name('Jake'); ?>
将Jake作为Luke的朋友添加。
<?php $user->addFriends($friend); ?>
获取Luke的朋友作为一个集合。
<?php foreach ($user->friends() as $_friend) { echo "{$_friend->name()}\n"; } ?>
有关治愈的更多信息,请从“通用用法”开始,然后逐步前进。
放松!API很简单,所以没有太多要学习的。
统计信息
- 1717行非注释代码
- 28个类,127个方法(每个类4个)
- 7个接口
- 705条语句(每个方法5条)覆盖率达到100%
- 127个测试和165个断言(0.97秒内完成)
运行 rake test
生成这些统计信息。我们使用 Rakefile
从单元测试生成统计信息,因此您需要在您的系统上安装 ruby 和 rake。
测试
测试覆盖得很好。我们的目标是
- 通过规范单元测试单独测试每个单元
- 保持接近 100% 的测试覆盖率,发布期间达到 100% 的覆盖率
- 通过验收测试测试用例
运行测试
在标准 PHPUnit 模式下运行所有内容
phpunit
运行特定逻辑区域
phpunit --group relationships
仅运行验收测试或规范
phpunit --group acceptance
phpunit --group specs
运行带有代码覆盖率的特殊规范报告
rake test
许可证
MIT 许可。
作者
火燃团队和任何愿意贡献的人。
火燃正在招聘!
如果您也喜欢参与这样的开源项目,并且有机会与我们共建火燃,那么请与我们联系!