gpt4 book ai didi

c# - 角色对象模式问题

转载 作者:太空狗 更新时间:2023-10-29 21:36:07 25 4
gpt4 key购买 nike

我正在看 Martin Fowler 完成的一篇名为 Dealing With Roles 的论文.在其中,Fowler 提出了处理组织中个人角色(即员工、工程师、经理、销售员)的三种基本策略,包括角色子类型化、角色对象和角色关系。

写于 1997 年,它肯定是旧的,并且作为“工作草稿”,它也有一些错误,否则就不会出现。我对他经历的角色对象示例感到困惑,并在下面包含了我对他的一些 Java 代码的 C# 解释。

我有三个问题:
(1) 有很多类型识别是用字符串完成的,看起来它应该可以用泛型替换,但我还不知道如何做。您将如何使用泛型实现此代码?
(2) JobRole 在代码中作为类型的字符串名称,但未在其余代码中具体定义。我不知道这是否是 PersonRole 的基类。 JobRole的解释是什么?单元测试看起来像是模式用法的正确示例吗?
(3) 有没有人有指向更新的实现和使用角色对象示例的任何链接?

干杯,
贝瑞尔

public class PersonWithRoles : Person
{
private readonly IList<PersonRole> _roles = new List<PersonRole>();

public static PersonWithRoles CreatePersonWithRoles(string identifierName) {
...
}

public void AddRole(PersonRole role) { _roles.Add(role); }

public PersonRole RoleOf(string typeName) { return _roles.FirstOrDefault(x => x.HasType(typeName)); }
}

public class PersonRole
{
public virtual bool HasType(string typeName) { return false; }
}

public class Salesman : PersonRole
{
public override bool HasType(string typeName)
{
if (typeName.Equals("Salesman", StringComparison.InvariantCultureIgnoreCase)) return true;
if (typeName.Equals("JobRole", StringComparison.InvariantCultureIgnoreCase)) return true;

return base.HasType(typeName);
}

public int NumberOfSales { get; set; }

}

[TestFixture]
public class RoleUsageTests
{
[Test]
public void Test() {
var p = PersonWithRoles.CreatePersonWithRoles("Ted");
var s = new Salesman();
p.AddRole(s);

var tedSales = (Salesman) p.RoleOf("Salesman");
tedSales.NumberOfSales = 50;
}
}

最佳答案

我相信这些类型的应用程序非常适合使用装饰器设计模式,其中有一个 Person 基类,然后每个角色都扩展该基类。基类没有权限声明——只有扩展 person 的角色类才应该。

抱歉含糊不清,但我希望你明白我想描述的内容。

class programmer {
name ...
email ...
seat location ...
}

class html_coder extends programmer {
canCodeHTML ...
}

class script_coder extends programmer {
canCodeHTML ...
canCodeJavascript ...
}

class senior_developer extends programmer {
canCodeHTML ...
canCodeJavascript ...
canAccessDatabase ...
canEditProjectArchitectureFiles ...
canWearTennisShoesToWork...
}

这些都扩展了程序员基类...注意程序员类没有声明权限...只是属性

关于c# - 角色对象模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com