実装パターン(またはイディオム)の名称について
解決したいこと
現在Swiftを用いて下記のようなコードをよく書いております。
// 適当な例
public class EntityGroup: EntityNode {
private var entities :[EntityNode]
public func setEntity(name: String, entityStyle: EntityStyle) {
if Internal.hasEntity(name: name, in: self.entiies) == false {
Internal.createEntity(name: name, into: self.entities, parent: self)
}
guard let entity = Internal.find(name: name, in: self.entites) else {
return
}
Internal.applyStyle(entify: entity, entityStyle)
}
}
// 状態を持たない、共通内部処理の委譲先
enum Internal {}
extension Internal {
static public func hasEntity ..
static public func createEntity ..
static public func find ..
... 以下略
}
コードを書いているときは、C++のstdなどでよく見かけた手法を参考にしています(
下記の二つ)
ただ、そのやり口(手法)名前があると思うのですが、ずっと分からないままモヤモヤしている次第です。
もしご存知の方がいらっしゃいましたらご教授いただけると幸いです。
1つ目のやり口
C++でよく見かけるやり口です。代表的なものとしてはstd::findがあって、実装手法について下記のような特徴があります。
・例えばstd::findは、はnamespace stdの静的メソッドで状態を持ちません
・例えばstd::findは、渡されるテンプレート引数の型が提供しているpublic なメソッド(Iterator系メソッドなど)を使用して、手続きを隠蔽&提供します(std::findなら、特定の要素のイテレータを検索・返却する手続き)
このように特定のnamespace以下に静的メソッドを配置し、静的メソッドは引数とされる型の公開メソッドを使用し拡張した機能を提供するやり口について、デザインパターンなどで名前がついている気がしていますが、調査に苦戦しています。
(また引数として渡される型はconceptなどで制約されていることが多いと思います)
2つ目のやり口
公開APIと内部処理の関数を分けるといったような手法のやり口の用語も思い出せず引っかかっていています。合わせてご存知の方がいらっしゃいましたらコメントいただけると幸いです
下記のようなコードです。
(主題はAPIと内部実装の分離について言及していて、DRVII...?? みたいな名前だった気がするのですが..)
class ClassA {
public:
UserInfo getUserInfomation(const std::string& id) {
return getUserInfomation_(id)
}
private:
UserInfo getUserInfomation_(const std::string& id) {
// internal process...
}
}