我正在为一个ASP.NET应用程序构建一个相对简单的类(例如:Person),该应用程序具有几个相关的布尔属性(例如:Certifications).我可以选择将它们存储为多个属性:
Class Person
Property HasCertL1
Property HasCertL2
Property HasCertL3
End Class
Run Code Online (Sandbox Code Playgroud)
或者使用集合和枚举:
Enum Cert
L1
L2
L3
End Enum
Class Person
Property Certs as List(Of Cert)
End Class
Run Code Online (Sandbox Code Playgroud)
该类将不会在其他地方使用,并且如果不重新编译该类,则不会更新项目(Certs).我正在寻找选择其中一个的理由.任何人都可以提供任何最佳实践或指向我可能错过的一些资源吗?提前致谢!
干杯,JE
我有一个c ++应用程序,有几种图像类型(RGB,灰色......),每种类型都有像旋转或缩放等属性.每种图像类型都是通过其他类型的计算生成的.例如,通过旋转GrayImage产生A旋转,而旋转a GrayImage又通过"灰化"产生RGBImage.
我想设计一个缓存类,其中GetX(...)包含缓存各种图像的方法(可能还有计算路径中的所有图像).如果不在缓存中,该类还将知道如何生成每个图像.
该类必须满足一些约束:
由于我们处理的是不同类型和表示的图像(RGB,GrayScale等),因此缓存必须为调用代码返回一个具体类,以便能够在不使用某种类型的情况下使用它.因此,缓存机制必须包含包含具体类型的不同缓存结构.(如果我错了,请修理我)
map<...,RGBImage>
map<...,GrayImage>
Run Code Online (Sandbox Code Playgroud)
例如.
缓存必须灵活地适应图像计算的变化.代码更改是可以接受的,只要它们不是太大.
我当前的版本Key为每种图像类型附加了一个结构.有GrayKey,RGBKey等等.各种键保持像Scale和Rotation这样的属性,并且可以具有特定于图像的属性(例如toGrayConvertingMethod for GrayKey).缓存保存表单的地图:
map <XKey,XImage>
Run Code Online (Sandbox Code Playgroud)
GetX(...)例如,方法接收Key结构作为请求Rotated GrayImage的参数.但是,此实现强制缓存应用大量逻辑来计算图像.它必须检查GrayKey是否请求旋转的图像并采取相应的行动.我想以更优雅的方式"编码"这个图像计算关系,但似乎找不到.
有什么建议?
非常感谢.
我想要一些资源来学习如何为Android设计?
我们需要具备哪些尺寸?
我们可以有自定义对话框和警报框设计吗?
你能指导我一些资源,如文章或书籍等.
我有一个适用于大量数据的应用程序,我想,可能是,有时候OutOfMemoryException会被抛出(半年来,我没有一个例外,但我只是想知道所有这些).正如我所调查的那样,在此异常之后,我无法继续执行我的程序.
是否有任何好的模式来处理这些异常,尤其是使用IDisposable类?
public class Foo
{
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }
public override int GetHashCode()
{
var hash = 17;
hash *= 23 + x.GetHashCode();
hash *= 23 + y.GetHashCode();
hash *= 23 + z.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
当你去单元测试GetHashCode时,我在计算原始组件和重复函数或使用预定值之间徘徊:
[TestMethod]
public void Test1
{
var x = 1; y = 2; z = 3;
var foo = new Foo() { X = x, Y = y, Z …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为Component的抽象基类,它是GUI组件层次结构的根.在这种情况下,我们可能有两个子类,Button和Label,它们都是抽象类,并作为各自具体类层次结构的根存在.
从Button继承的具体类可能包括RoundButton和SquareButton.
从Label继承的具体类可能包括TextLabel和PictureLabel.
最后,假设有一个聚合Container类,它包含一组Component对象.
问题是我有指向Component对象的指针,但我需要将它们标识为Buttons或Labels.例如,如果我想指定所有Buttons的内部文本应该有一个更大的字体,我可以迭代Container中的所有Component对象,并以某种方式确定哪些是按钮,并调用一些特定于按钮的方法.
这些组件"系列"标识自己的一种方法是使用字符串.
class Component {
public:
virtual char const * const getFamilyID() const = 0;
};
// In Button.h
char const * const COMPONENT_BUTTON = "button";
class Button : public Component {
public:
virtual char const * const getFamilyID() const { return COMPONENT_BUTTON; };
};
// Code sample
if (strcmp(component->getFamilyID(),COMPONENT_BUTTON) == 0)
// It's a button!
Run Code Online (Sandbox Code Playgroud)
这是松散耦合的,因为该组件的任务是为这些家庭定义这些家庭; 它不需要了解哪些家庭存在.客户端需要知道不同的组件系列,但如果它尝试针对某些操作来定位特定的组件系列,那么这是无法避免的.
但是,假设我们有非常高的性能要求,我们希望避免比较字符串.避免将此功能设置为虚拟也很好,以便我们可以内联它.此外,如果Component的每个子类都需要声明一个全局常量,那么以某种方式修改Component类以使其成为需求或使其不必要可能会很好.
解决此问题的一种方法是在Component.h中定义一个枚举器
enum COMPONENT_FAMILY {
COMPONENT_BUTTON = 0,
COMPONENT_LABEL,
// etc...
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,getFamilyID()只能返回COMPONENT_FAMILY枚举,我们基本上只能比较整数.不幸的是,这意味着任何新的组件系列都必须在此枚举中"注册",这很容易但对其他程序员来说并不完全直观.此外,该方法仍然必须是虚拟的,除非我们创建一个我们知道将具有极低基数(非理想)的非静态COMPONENT_FAMILY成员.
什么是解决这个问题的好方法?在我的情况下,性能是关键,虽然类似于枚举解决方案似乎很容易,但我想知道我是否忽略了更好的方法.
---编辑---
我意识到我应该指出,在实际系统中,Container等价物只能存储每个族的1个组件.因此,组件实际上存储在地图中,例如:
std:map<COMPONENT_FAMILY, Component*> …Run Code Online (Sandbox Code Playgroud) 在契约式设计中,类不变量必须在两种情况下满足:创建对象之后和调用例程之后。是否有任何示例或条件,我也必须在调用例程之前进行评估?
这是我在设计界面时遇到的问题的一个例子.
我有一个动物类,我从中获得了猫,狗和狮子.现在我有一个函数'feedFood',它接受基类Animal作为参数.根据动物的类型,我应该给动物喂食不同的食物.
那么如何在'feedFood'功能中检查动物的类型.
我能想到3种方法
哪种方法最好,还是有其他更好的方法?
.net ×3
c++ ×3
android ×1
assert ×1
c# ×1
class ×1
class-design ×1
collections ×1
decoupling ×1
eiffel ×1
gethashcode ×1
idisposable ×1
invariants ×1
polymorphism ×1
properties ×1
try-catch ×1
unit-testing ×1