|
|
@@ -23,22 +23,22 @@ class CropPlantedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 土地ID
|
|
|
*/
|
|
|
public $landId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 种子ID
|
|
|
*/
|
|
|
public $seedId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 作物ID
|
|
|
*/
|
|
|
public $cropId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -65,27 +65,27 @@ class CropHarvestedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 土地ID
|
|
|
*/
|
|
|
public $landId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 作物ID
|
|
|
*/
|
|
|
public $cropId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 种子ID
|
|
|
*/
|
|
|
public $seedId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 产出数量
|
|
|
*/
|
|
|
public $outputAmount;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -113,22 +113,22 @@ class LandUpgradedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 土地ID
|
|
|
*/
|
|
|
public $landId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 旧土地类型
|
|
|
*/
|
|
|
public $oldType;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 新土地类型
|
|
|
*/
|
|
|
public $newType;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -155,17 +155,17 @@ class HouseUpgradedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 旧等级
|
|
|
*/
|
|
|
public $oldLevel;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 新等级
|
|
|
*/
|
|
|
public $newLevel;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -191,17 +191,17 @@ class DisasterOccurredEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 作物ID
|
|
|
*/
|
|
|
public $cropId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 灾害类型
|
|
|
*/
|
|
|
public $disasterType;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -232,27 +232,27 @@ class ItemChangedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 物品ID
|
|
|
*/
|
|
|
public $itemId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var string 变更类型 (add/remove)
|
|
|
*/
|
|
|
public $changeType;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 变更数量
|
|
|
*/
|
|
|
public $amount;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var string 变更原因
|
|
|
*/
|
|
|
public $reason;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -281,22 +281,22 @@ class PetSkillUsedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 宠物ID
|
|
|
*/
|
|
|
public $petId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 技能ID
|
|
|
*/
|
|
|
public $skillId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var array 技能参数
|
|
|
*/
|
|
|
public $params;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -310,9 +310,46 @@ class PetSkillUsedEvent
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 3. 事件监听器
|
|
|
+## 3. 事件列表
|
|
|
+
|
|
|
+以下是农场模块中所有事件的完整列表,包括发出的事件和监听的事件。
|
|
|
+
|
|
|
+### 3.1 发出的事件列表
|
|
|
+
|
|
|
+| 事件名称 | 事件类 | 触发条件 | 包含数据 | 用途 |
|
|
|
+|---------|-------|---------|---------|------|
|
|
|
+| 作物种植事件 | CropPlantedEvent | 用户种植作物 | userId, landId, seedId, cropId | 通知其他模块用户种植了作物 |
|
|
|
+| 作物收获事件 | CropHarvestedEvent | 用户收获作物 | userId, landId, cropId, seedId, outputAmount | 通知其他模块用户收获了作物,用于计算团队收益等 |
|
|
|
+| 土地升级事件 | LandUpgradedEvent | 用户升级土地 | userId, landId, oldType, newType | 通知其他模块用户升级了土地 |
|
|
|
+| 房屋升级事件 | HouseUpgradedEvent | 用户升级房屋 | userId, oldLevel, newLevel | 通知其他模块用户升级了房屋 |
|
|
|
+| 灾害发生事件 | DisasterOccurredEvent | 作物遭遇灾害 | userId, cropId, disasterType | 通知其他模块作物遭遇了灾害 |
|
|
|
+| 作物生长阶段变更事件 | CropGrowthStageChangedEvent | 作物生长阶段变更 | userId, cropId, oldStage, newStage | 通知其他模块作物生长阶段发生变化 |
|
|
|
+| 土地状态变更事件 | LandStatusChangedEvent | 土地状态变更 | userId, landId, oldStatus, newStatus | 通知其他模块土地状态发生变化 |
|
|
|
+| 神灵加持激活事件 | GodBuffActivatedEvent | 用户激活神灵加持 | userId, buffType, expireTime | 通知其他模块用户激活了神灵加持 |
|
|
|
+| 神灵加持过期事件 | GodBuffExpiredEvent | 神灵加持过期 | userId, buffType | 通知其他模块用户的神灵加持已过期 |
|
|
|
+| 灾害处理事件 | DisasterHandledEvent | 用户处理灾害 | userId, cropId, disasterType, toolId | 通知其他模块用户处理了灾害 |
|
|
|
|
|
|
-### 3.1 物品变更事件监听器
|
|
|
+### 3.2 监听的事件列表
|
|
|
+
|
|
|
+| 事件名称 | 事件类 | 来源模块 | 监听目的 | 处理逻辑 |
|
|
|
+|---------|-------|---------|---------|---------|
|
|
|
+| 物品变更事件 | ItemChangedEvent | GameItems | 处理与农场相关的物品变更 | 处理种子、化肥、工具等物品的变更 |
|
|
|
+| 宠物技能使用事件 | PetSkillUsedEvent | Pet | 处理与农场相关的宠物技能 | 处理自动收菜、自动播种、除草等宠物技能 |
|
|
|
+| 用户注册事件 | UserRegisteredEvent | User | 初始化用户农场 | 为新注册用户创建农场记录和初始土地 |
|
|
|
+| 每日重置事件 | DailyResetEvent | System | 处理农场每日重置 | 重置每日限制、检查房屋降级等 |
|
|
|
+
|
|
|
+### 3.3 事件与监听器对应关系
|
|
|
+
|
|
|
+| 事件类 | 监听器类 | 处理方法 |
|
|
|
+|-------|---------|---------|
|
|
|
+| ItemChangedEvent | ItemChangedListener | handle() |
|
|
|
+| PetSkillUsedEvent | PetSkillUsedListener | handle() |
|
|
|
+| UserRegisteredEvent | UserRegisteredListener | handle() |
|
|
|
+| DailyResetEvent | DailyResetListener | handle() |
|
|
|
+
|
|
|
+## 4. 事件监听器
|
|
|
+
|
|
|
+### 4.1 物品变更事件监听器
|
|
|
|
|
|
监听物品变更事件,处理与农场相关的物品变更。
|
|
|
|
|
|
@@ -329,12 +366,12 @@ class ItemChangedListener
|
|
|
* @var SeedService
|
|
|
*/
|
|
|
protected $seedService;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var CropService
|
|
|
*/
|
|
|
protected $cropService;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -343,7 +380,7 @@ class ItemChangedListener
|
|
|
$this->seedService = $seedService;
|
|
|
$this->cropService = $cropService;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理事件
|
|
|
*/
|
|
|
@@ -354,23 +391,23 @@ class ItemChangedListener
|
|
|
$itemId = $event->itemId;
|
|
|
$changeType = $event->changeType;
|
|
|
$amount = $event->amount;
|
|
|
-
|
|
|
+
|
|
|
// 处理种子物品变更
|
|
|
if ($this->isSeedItem($itemId)) {
|
|
|
$this->handleSeedItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 处理化肥物品变更
|
|
|
if ($this->isFertilizerItem($itemId)) {
|
|
|
$this->handleFertilizerItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 处理工具物品变更
|
|
|
if ($this->isToolItem($itemId)) {
|
|
|
$this->handleToolItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 判断物品是否为种子
|
|
|
*/
|
|
|
@@ -379,7 +416,7 @@ class ItemChangedListener
|
|
|
// 判断逻辑
|
|
|
return $this->seedService->isSeedItem($itemId);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理种子物品变更
|
|
|
*/
|
|
|
@@ -387,12 +424,12 @@ class ItemChangedListener
|
|
|
{
|
|
|
// 处理逻辑
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 其他辅助方法...
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### 3.2 宠物技能使用事件监听器
|
|
|
+### 4.2 宠物技能使用事件监听器
|
|
|
|
|
|
监听宠物技能使用事件,处理与农场相关的宠物技能。
|
|
|
|
|
|
@@ -409,12 +446,12 @@ class PetSkillUsedListener
|
|
|
* @var CropService
|
|
|
*/
|
|
|
protected $cropService;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var LandService
|
|
|
*/
|
|
|
protected $landService;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -423,7 +460,7 @@ class PetSkillUsedListener
|
|
|
$this->cropService = $cropService;
|
|
|
$this->landService = $landService;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理事件
|
|
|
*/
|
|
|
@@ -434,23 +471,23 @@ class PetSkillUsedListener
|
|
|
$petId = $event->petId;
|
|
|
$skillId = $event->skillId;
|
|
|
$params = $event->params;
|
|
|
-
|
|
|
+
|
|
|
// 处理自动收菜技能
|
|
|
if ($this->isAutoHarvestSkill($skillId)) {
|
|
|
$this->handleAutoHarvest($userId, $params);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 处理自动播种技能
|
|
|
if ($this->isAutoPlantSkill($skillId)) {
|
|
|
$this->handleAutoPlant($userId, $params);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 处理除草技能
|
|
|
if ($this->isWeedRemovalSkill($skillId)) {
|
|
|
$this->handleWeedRemoval($userId, $params);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 判断技能是否为自动收菜技能
|
|
|
*/
|
|
|
@@ -459,7 +496,7 @@ class PetSkillUsedListener
|
|
|
// 判断逻辑
|
|
|
return $skillId == 1001;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理自动收菜技能
|
|
|
*/
|
|
|
@@ -467,18 +504,18 @@ class PetSkillUsedListener
|
|
|
{
|
|
|
// 获取用户所有可收获的作物
|
|
|
$harvestableCrops = $this->cropService->getUserHarvestableCrops($userId);
|
|
|
-
|
|
|
+
|
|
|
// 自动收获作物
|
|
|
foreach ($harvestableCrops as $crop) {
|
|
|
$this->cropService->harvestCrop($crop->id);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 其他辅助方法...
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 4. 事件注册
|
|
|
+## 5. 事件注册
|
|
|
|
|
|
在 `FarmServiceProvider` 中注册事件和监听器:
|
|
|
|
|
|
@@ -506,30 +543,30 @@ class FarmServiceProvider extends ServiceProvider
|
|
|
PetSkillUsedListener::class,
|
|
|
],
|
|
|
];
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 注册服务提供者
|
|
|
*/
|
|
|
public function register()
|
|
|
{
|
|
|
parent::register();
|
|
|
-
|
|
|
+
|
|
|
// 注册服务
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 启动服务提供者
|
|
|
*/
|
|
|
public function boot()
|
|
|
{
|
|
|
parent::boot();
|
|
|
-
|
|
|
+
|
|
|
// 启动服务
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 5. 事件触发
|
|
|
+## 6. 事件触发
|
|
|
|
|
|
在服务层中触发事件:
|
|
|
|
|
|
@@ -548,10 +585,10 @@ class CropService
|
|
|
{
|
|
|
// 种植作物的业务逻辑
|
|
|
// ...
|
|
|
-
|
|
|
+
|
|
|
// 触发作物种植事件
|
|
|
event(new CropPlantedEvent($userId, $landId, $seedId, $crop->id));
|
|
|
-
|
|
|
+
|
|
|
return [
|
|
|
'crop_id' => $crop->id,
|
|
|
'land_id' => $landId,
|
|
|
@@ -560,7 +597,7 @@ class CropService
|
|
|
'stage_end_time' => $crop->stage_end_time,
|
|
|
];
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 收获作物
|
|
|
*/
|
|
|
@@ -568,10 +605,10 @@ class CropService
|
|
|
{
|
|
|
// 收获作物的业务逻辑
|
|
|
// ...
|
|
|
-
|
|
|
+
|
|
|
// 触发作物收获事件
|
|
|
event(new CropHarvestedEvent($userId, $land->id, $crop->id, $seedConfig->id, $outputAmount));
|
|
|
-
|
|
|
+
|
|
|
return [
|
|
|
'output_item_id' => $seedConfig->output_item_id,
|
|
|
'amount' => $outputAmount
|
|
|
@@ -580,25 +617,25 @@ class CropService
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 6. 事件处理流程
|
|
|
+## 7. 事件处理流程
|
|
|
|
|
|
-### 6.1 发出事件流程
|
|
|
+### 7.1 发出事件流程
|
|
|
|
|
|
1. 在服务层方法中执行业务逻辑
|
|
|
2. 业务逻辑执行成功后,使用 `event()` 函数触发事件
|
|
|
3. Laravel 事件系统将事件分发给注册的监听器
|
|
|
4. 监听器执行相应的处理逻辑
|
|
|
|
|
|
-### 6.2 监听事件流程
|
|
|
+### 7.2 监听事件流程
|
|
|
|
|
|
1. 在 `FarmServiceProvider` 中注册监听器
|
|
|
2. 当其他模块触发事件时,Laravel 事件系统将事件分发给注册的监听器
|
|
|
3. 监听器的 `handle()` 方法被调用,接收事件对象作为参数
|
|
|
4. 监听器根据事件数据执行相应的处理逻辑
|
|
|
|
|
|
-## 7. 事件系统扩展
|
|
|
+## 8. 事件系统扩展
|
|
|
|
|
|
-### 7.1 添加新事件
|
|
|
+### 8.1 添加新事件
|
|
|
|
|
|
如需添加新事件,请按照以下步骤操作:
|
|
|
|
|
|
@@ -617,22 +654,22 @@ class CropGrowthStageChangedEvent
|
|
|
* @var int 用户ID
|
|
|
*/
|
|
|
public $userId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 作物ID
|
|
|
*/
|
|
|
public $cropId;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 旧生长阶段
|
|
|
*/
|
|
|
public $oldStage;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @var int 新生长阶段
|
|
|
*/
|
|
|
public $newStage;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -646,7 +683,7 @@ class CropGrowthStageChangedEvent
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### 7.2 添加新监听器
|
|
|
+### 8.2 添加新监听器
|
|
|
|
|
|
如需添加新监听器,请按照以下步骤操作:
|
|
|
|
|
|
@@ -668,7 +705,7 @@ class UserRegisteredListener
|
|
|
* @var FarmService
|
|
|
*/
|
|
|
protected $farmService;
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
@@ -676,7 +713,7 @@ class UserRegisteredListener
|
|
|
{
|
|
|
$this->farmService = $farmService;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 处理事件
|
|
|
*/
|
|
|
@@ -684,7 +721,7 @@ class UserRegisteredListener
|
|
|
{
|
|
|
// 获取事件数据
|
|
|
$userId = $event->userId;
|
|
|
-
|
|
|
+
|
|
|
// 初始化用户农场
|
|
|
$this->farmService->initUserFarm($userId);
|
|
|
}
|
|
|
@@ -707,8 +744,129 @@ protected $listen = [
|
|
|
];
|
|
|
```
|
|
|
|
|
|
-## 8. 总结
|
|
|
+## 9. 模块间服务调用
|
|
|
+
|
|
|
+除了事件系统外,模块间还通过直接的服务调用进行交互,特别是对于核心业务流程。
|
|
|
+
|
|
|
+### 9.1 被其他模块调用的服务
|
|
|
+
|
|
|
+农场模块提供以下服务接口供其他模块调用:
|
|
|
+
|
|
|
+| 服务方法 | 调用模块 | 用途 | 参数 | 返回值 |
|
|
|
+|---------|---------|------|------|-------|
|
|
|
+| unlockFeature | Quest | 解锁农场功能 | userId, featureType | bool |
|
|
|
+| addReward | Quest | 发放农场奖励 | userId, rewardType, amount | bool |
|
|
|
+| checkFarmCondition | Quest | 检查农场条件 | userId, conditionType | bool |
|
|
|
+
|
|
|
+### 9.2 调用示例
|
|
|
+
|
|
|
+```php
|
|
|
+// 在任务模块中调用农场服务
|
|
|
+public function completeQuest(int $userId, int $questId)
|
|
|
+{
|
|
|
+ // 任务完成逻辑
|
|
|
+ // ...
|
|
|
+
|
|
|
+ // 根据任务类型调用相应的农场服务
|
|
|
+ if ($quest->type == QuestType::FARM_RELATED) {
|
|
|
+ $this->farmService->unlockFeature($userId, $quest->reward_feature_type);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 9.3 服务接口声明
|
|
|
+
|
|
|
+```php
|
|
|
+/**
|
|
|
+ * 农场服务接口
|
|
|
+ *
|
|
|
+ * 提供给其他模块调用的农场功能接口
|
|
|
+ */
|
|
|
+interface FarmServiceInterface
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 解锁农场功能
|
|
|
+ *
|
|
|
+ * @param int $userId 用户ID
|
|
|
+ * @param int $featureType 功能类型(参考FarmFeatureType枚举)
|
|
|
+ * @return bool 是否成功
|
|
|
+ */
|
|
|
+ public function unlockFeature(int $userId, int $featureType): bool;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发放农场奖励
|
|
|
+ *
|
|
|
+ * @param int $userId 用户ID
|
|
|
+ * @param int $rewardType 奖励类型(参考FarmRewardType枚举)
|
|
|
+ * @param int $amount 奖励数量
|
|
|
+ * @return bool 是否成功
|
|
|
+ */
|
|
|
+ public function addReward(int $userId, int $rewardType, int $amount): bool;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查农场条件
|
|
|
+ *
|
|
|
+ * @param int $userId 用户ID
|
|
|
+ * @param int $conditionType 条件类型(参考FarmConditionType枚举)
|
|
|
+ * @return bool 是否满足条件
|
|
|
+ */
|
|
|
+ public function checkFarmCondition(int $userId, int $conditionType): bool;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 9.4 服务调用伪代码
|
|
|
+
|
|
|
+```php
|
|
|
+// 在任务系统中调用农场服务的伪代码
|
|
|
+class QuestService
|
|
|
+{
|
|
|
+ // 依赖注入农场服务
|
|
|
+ public function __construct(FarmServiceInterface $farmService)
|
|
|
+ {
|
|
|
+ // 初始化
|
|
|
+ }
|
|
|
+
|
|
|
+ // 完成任务
|
|
|
+ public function completeQuest(int $userId, int $questId): bool
|
|
|
+ {
|
|
|
+ // 任务完成逻辑
|
|
|
+
|
|
|
+ // 根据任务类型调用相应的农场服务
|
|
|
+ if (/* 任务与农场相关 */) {
|
|
|
+ // 解锁农场功能
|
|
|
+ $this->farmService->unlockFeature($userId, /* 功能类型 */);
|
|
|
+
|
|
|
+ // 发放农场奖励
|
|
|
+ $this->farmService->addReward($userId, /* 奖励类型 */, /* 奖励数量 */);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 任务完成后的其他处理...
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 9.5 服务接口设计原则
|
|
|
+
|
|
|
+1. **职责明确**:每个服务方法应该有明确的职责,避免一个方法做多件事情
|
|
|
+2. **参数简洁**:参数应该简洁明了,避免过多的参数
|
|
|
+3. **返回值清晰**:返回值应该清晰表达操作结果,必要时使用异常处理错误情况
|
|
|
+4. **文档完善**:每个服务方法都应该有完善的文档,包括参数说明、返回值说明和异常说明
|
|
|
+5. **版本控制**:服务接口的变更应该遵循版本控制原则,避免破坏向后兼容性
|
|
|
+
|
|
|
+## 10. 总结
|
|
|
+
|
|
|
+农场模块通过两种方式与其他模块交互:事件系统和服务调用。
|
|
|
+
|
|
|
+**事件系统**用于处理非核心业务流程,如通知、日志、统计等。模块发出的事件包括作物种植事件、作物收获事件、土地升级事件、房屋升级事件和灾害发生事件;模块监听的事件包括物品变更事件和宠物技能使用事件。
|
|
|
|
|
|
-农场模块的事件系统通过发布和订阅事件,实现了模块间的松耦合通信。模块发出的事件包括作物种植事件、作物收获事件、土地升级事件、房屋升级事件和灾害发生事件;模块监听的事件包括物品变更事件和宠物技能使用事件。
|
|
|
+**服务调用**用于处理核心业务流程,如任务系统调用农场系统的服务来解锁功能或发放奖励。这种方式保持了代码流程的清晰和可控,同时减少了模块间的耦合。
|
|
|
|
|
|
-事件系统的使用使得模块间的交互更加灵活,降低了模块间的耦合度,提高了代码的可维护性和可扩展性。在开发过程中,应该合理使用事件系统,避免过度使用导致代码流程难以追踪。
|
|
|
+在开发过程中,应该根据具体需求选择合适的交互方式:
|
|
|
+- 对于核心业务流程,优先使用服务调用
|
|
|
+- 对于非核心业务流程,优先使用事件系统
|
|
|
+- 避免过度使用事件系统导致代码流程难以追踪
|
|
|
+- 避免过度使用服务调用导致模块间的强耦合
|