C++ 使用 PHP 中的特征
C++ use traits like in PHP
我正在寻找一个解决方案,如何在 C++ 中定义可重用代码,如 PHP 中的特征。
问题描述:
我有三个 classes(Class、Customer、Admin),每个 class 有时必须执行相同的操作,例如插入新的 child、添加新地址或添加new class(与更新和删除操作相同)。我想避免在每个 class 中再次开发这些功能。
此外,如果这些功能与 class "product_name" 分开,我会非常高兴。我不想将所有这些函数都写到 class "product_name" 或 "product" 中,否则 class 对于太多函数来说太混乱了。
编辑
class "product_name" 的名称是我的产品的占位符。目前我不知道我的产品名称:)。 parent class "product" 是我未来想开发的所有产品的集合点。我创建这个 class,因为我想使用 Single-Sign-On 和相同的用户数据库...所以我必须只开发一次这些部分!
Class我的愿望图:
C++ 在很多方面都不同于 PHP。这就是您如何在 C++ 中设计域驱动的 DAO。
此示例使用 POCO 库进行数据库连接。您可以将任何其他库用于同一提议。
enum class Role {
ADMIN,
CUSTOMER,
SCHOOL_ACCOUNT
}
class User {
protected:
constexpr User(Role role) noexcept:
role_(role)
{}
public:
User(const User&) = delete;
User& operator=(const User&) = delete;
Role role() const noexcept {
return role_;
}
virtual const char* id() const = 0;
virtual ~User() = 0;
private:
Role role_;
};
User::~User()
{}
class MyIDGenerator {
public:
static std::string generate() {
static POCO::UUIDGenerator gen;
return gen.create().toString();
}
};
class Customer final: public User {
public:
Customer() noexcept:
User(Role.CUSTOMER),
id_( MyIDGenerator::generate() )
{}
virtual const char* id() const override
{
return id_.data();
}
virtual ~Customer() override
{}
private:
std::string id_;
}
...
// define your Admin and School
...
class Product {
public:
Product():
id_( MyIDGenerator::generate() )
{}
void insertUser(const User* user, const Poco::Data::Session& session) {
// execute your SQL hire i.e. something like
POCO::Data::Statement insert(session);
insert << "insert into product_allowed_user values(?,?) << use(id_) << use(user->id());
insert.execute();
}
private:
std::string id_;
}
我正在寻找一个解决方案,如何在 C++ 中定义可重用代码,如 PHP 中的特征。
问题描述: 我有三个 classes(Class、Customer、Admin),每个 class 有时必须执行相同的操作,例如插入新的 child、添加新地址或添加new class(与更新和删除操作相同)。我想避免在每个 class 中再次开发这些功能。
此外,如果这些功能与 class "product_name" 分开,我会非常高兴。我不想将所有这些函数都写到 class "product_name" 或 "product" 中,否则 class 对于太多函数来说太混乱了。
编辑
class "product_name" 的名称是我的产品的占位符。目前我不知道我的产品名称:)。 parent class "product" 是我未来想开发的所有产品的集合点。我创建这个 class,因为我想使用 Single-Sign-On 和相同的用户数据库...所以我必须只开发一次这些部分!
Class我的愿望图:
C++ 在很多方面都不同于 PHP。这就是您如何在 C++ 中设计域驱动的 DAO。
此示例使用 POCO 库进行数据库连接。您可以将任何其他库用于同一提议。
enum class Role {
ADMIN,
CUSTOMER,
SCHOOL_ACCOUNT
}
class User {
protected:
constexpr User(Role role) noexcept:
role_(role)
{}
public:
User(const User&) = delete;
User& operator=(const User&) = delete;
Role role() const noexcept {
return role_;
}
virtual const char* id() const = 0;
virtual ~User() = 0;
private:
Role role_;
};
User::~User()
{}
class MyIDGenerator {
public:
static std::string generate() {
static POCO::UUIDGenerator gen;
return gen.create().toString();
}
};
class Customer final: public User {
public:
Customer() noexcept:
User(Role.CUSTOMER),
id_( MyIDGenerator::generate() )
{}
virtual const char* id() const override
{
return id_.data();
}
virtual ~Customer() override
{}
private:
std::string id_;
}
...
// define your Admin and School
...
class Product {
public:
Product():
id_( MyIDGenerator::generate() )
{}
void insertUser(const User* user, const Poco::Data::Session& session) {
// execute your SQL hire i.e. something like
POCO::Data::Statement insert(session);
insert << "insert into product_allowed_user values(?,?) << use(id_) << use(user->id());
insert.execute();
}
private:
std::string id_;
}