Add strategy pattern architecture for BOM module processing

- Add IModuleProcessor interface defining the processor contract
- Implement cProcessor_AppendOnly strategy for modifying existing BOM rows
- Implement cProcessor_CloneNew strategy for creating new BOM rows
- Add mProcessorFactory module for creating processor instances
- Add mSpecAdditionManager module for coordinating spec addition operations
- Enhance test suite with business logic layer and pipeline integration tests

This implements the Strategy pattern to allow flexible BOM modification behaviors while maintaining clean separation of concerns.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-03-19 14:09:29 +08:00
parent 76a75c9a05
commit d17d7c5864
6 changed files with 274 additions and 24 deletions

View File

@@ -0,0 +1,16 @@
' ==============================================================================
' 模块名称: IModuleProcessor
' 模块类别: 类模块 (用作接口 Interface)
' 模块职责: 定义统一的业务处理接口基于UI用户选择的物料名称进行精准处理
' ==============================================================================
Option Explicit
' 方法名: ProcessSpec
' allBOMs: 包含所有物料信息的集合 (库里的所有数据)
' targetItemName: 要被处理的物料的名称字段 (瞄准镜)
' paramName: 参数名(如 lcfw)
' newValue: 新规格代码(如 M19)
' engine: 条件注入引擎实例
Public Sub ProcessSpec(ByRef allBOMs As Collection, ByVal targetItemName As String, ByVal paramName As String, ByVal newValue As String, ByRef engine As cConditionEngine)
'
End Sub

View File

@@ -0,0 +1,28 @@
' ==============================================================================
' 模块名称: cProcessor_AppendOnly
' 模块类别: 类模块
' 模块职责: 通用追加策略。适用于接头、封口片、机芯、盘止钉等。
' 逻辑描述: 遍历所有数据,凡是名称与目标匹配的变种,一律注入新条件。
' ==============================================================================
Option Explicit
Implements IModuleProcessor
Private Sub IModuleProcessor_ProcessSpec( _
ByRef allBOMs As Collection, _
ByVal targetItemName As String, _
ByVal paramName As String, _
ByVal newValue As String, _
ByRef engine As cConditionEngine)
Dim rowObj As cBOMRow
' 遍历整个库
For Each rowObj In allBOMs
' 只要名称完全匹配 (忽略大小写进行比对)
If StrComp(rowObj.ItemName, targetItemName, vbTextCompare) = 0 Then
'
rowObj.Condition = engine.InjectOr(rowObj.Condition, paramName, newValue)
End If
Next rowObj
End Sub

View File

@@ -0,0 +1,39 @@
' ==============================================================================
' 模块名称: cProcessor_CloneNew
' 模块类别: 类模块
' 模块职责: 通用克隆新增策略。适用于弹性元件等需要完全独立成行的规格。
' 逻辑描述: 找到第一个匹配的母版行,克隆它并赋予纯粹的新规格条件。
' ==============================================================================
Option Explicit
Implements IModuleProcessor
Private Sub IModuleProcessor_ProcessSpec( _
ByRef allBOMs As Collection, _
ByVal targetItemName As String, _
ByVal paramName As String, _
ByVal newValue As String, _
ByRef engine As cConditionEngine)
Dim rowObj As cBOMRow
Dim templateRow As cBOMRow
Set templateRow = Nothing
' 1. 寻找母版 (找到同名的第一条记录即可)
For Each rowObj In allBOMs
If StrComp(rowObj.ItemName, targetItemName, vbTextCompare) = 0 Then
Set templateRow = rowObj
Exit For
End If
Next rowObj
' 2. 如果找到了母版,进行克隆
If Not templateRow Is Nothing Then
Dim newRow As cBOMRow
' 调用数据访问层的克隆方法,它会自动把新对象加入到 allBOMs 集合中
Set newRow = mBOMRepository.InsertNewBOMRow(allBOMs, templateRow)
' (lcfw=M19)
newRow.Condition = paramName & "=" & newValue
End If
End Sub