![]() |
1
11
例如,您可以使用 the strategy pattern 以下内容:
或者,您可以将方法命名为
|
![]() |
2
12
一般来说,每当您看到类型或枚举上的开关时,它意味着您可以将对象中的“类型”替换为“类型”—换言之,这是 polymorphism .
实际上,这意味着您将为每个问题类型创建一个不同的类,并重写
好处是您可以删除switch语句并生成良好的基于OO的代码。收回是为每种问题类型添加一个类(在本例中,影响最小)。 |
![]() |
3
5
这是使用对象继承来实现所需功能的经典案例。每当您看到一个大型switch语句打开一个对象的类型时,您应该考虑某种形式的子类化。 我看到了两种方法,这取决于这些问题类型的“通用性”以及渲染是否是它们之间的唯一区别: 方案1 -问题类的子类
选项2 -创建一个呈现接口,并使其成为问题类的属性
在本例中,您将根据问题类型在构造函数中实例化呈现器。 如果问题类型在很多方面不同于呈现,则选项1可能更可取。如果渲染是唯一的区别,请考虑选项2。 |
![]() |
4
3
最好将呈现逻辑分离到自己的类中。您不希望将呈现逻辑嵌入到应用程序的业务逻辑中。 我将创建一个名为questionrenderer的类,它接受一个问题,读取其类型,并相应地输出呈现。如果您使用的是ASP.NET,它可以输出WebControls,也可以执行输出HTML的服务器控件。 |
![]() |
5
1
为什么没有
在渲染方法中,可以根据问题类型决定要渲染的内容。 |
![]() |
6
1
我不喜欢将细节呈现在与数据相同的类中的想法。 因此,一个选项是让您的呈现方法简单地生成一组处理实际HTML呈现的用户控件中的一个。 另一种方法是有一个单独的类questionrenderer,它将具有问题类型的各种子类(每个子类都将呈现正确的HTML)。 |
![]() |
7
1
我认为您需要的是一个IUserType,它通过某个问题工厂将属性从Hibernate映射转换为正确的控件类型。 以下是使用iusertype的示例: NHibernate IUserType 在这个示例中,它将一个blob转换为一个图像,以便在客户端使用,但是使用相同的思想,您可以使用questiontype创建页面。 |
![]() |
8
1
你可以使用策略模式( Wikipedia )以及一家工厂。
只有公共财产需要包括在NHibernate中。 |
![]() |
9
1
渲染绝对是一个用户界面问题,所以我将它与
用途:
|
![]() |
10
0
说明了明显的问题:您可能可以使用工厂方法来获取所需呈现类的实例,并调用该实例的render来获取所需的输出。 |
![]() |
11
0
我将采用的方法是为您希望使用的每个视觉样式创建一个单独的控件(如果您在MVC中,则创建一个HTMLHelper方法)。这分离了将问题表示为一个对象的关注点,并在视觉上整洁地表示它。
然后,可以使用主控件(或方法)根据
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 8 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 8 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |