the-cure/the-cure

对您的领域逻辑影响最小的数据映射器。

v0.2.1 2012-09-25 22:10 UTC

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文件

the-cure v0.2.1

成分

在我们进入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。

测试

Build Status

测试覆盖得很好。我们的目标是

  • 通过规范单元测试单独测试每个单元
  • 保持接近 100% 的测试覆盖率,发布期间达到 100% 的覆盖率
  • 通过验收测试测试用例

运行测试

在标准 PHPUnit 模式下运行所有内容

phpunit

运行特定逻辑区域

phpunit --group relationships

仅运行验收测试或规范

phpunit --group acceptance
phpunit --group specs

运行带有代码覆盖率的特殊规范报告

rake test

许可证

MIT 许可。

作者

火燃团队和任何愿意贡献的人。

火燃正在招聘!

如果您也喜欢参与这样的开源项目,并且有机会与我们共建火燃,那么请与我们联系!

http://gun.io/careers/959/php-developer