小编Sis*_*hus的帖子

何时使用集合与多个属性

我正在为一个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

.net collections properties class

5
推荐指数
1
解决办法
132
查看次数

C++缓存设计建议

我有一个c ++应用程序,有几种图像类型(RGB,灰色......),每种类型都有像旋转或缩放等属性.每种图像类型都是通过其他类型的计算生成的.例如,通过旋转GrayImage产生A旋转,而旋转a GrayImage又通过"灰化"产生RGBImage.

我想设计一个缓存类,其中GetX(...)包含缓存各种图像的方法(可能还有计算路径中的所有图像).如果不在缓存中,该类还将知道如何生成每个图像.

该类必须满足一些约束:

  1. 由于我们处理的是不同类型和表示的图像(RGB,GrayScale等),因此缓存必须为调用代码返回一个具体类,以便能够在不使用某种类型的情况下使用它.因此,缓存机制必须包含包含具体类型的不同缓存结构.(如果我错了,请修理我)

    map<...,RGBImage> 
    map<...,GrayImage> 
    
    Run Code Online (Sandbox Code Playgroud)

    例如.

  2. 缓存必须灵活地适应图像计算的变化.代码更改是可以接受的,只要它们不是太大.

我当前的版本Key为每种图像类型附加了一个结构.有GrayKey,RGBKey等等.各种键保持像Scale和Rotation这样的属性,并且可以具有特定于图像的属性(例如toGrayConvertingMethod for GrayKey).缓存保存表单的地图:

    map <XKey,XImage>
Run Code Online (Sandbox Code Playgroud)

GetX(...)例如,方法接收Key结构作为请求Rotated GrayImage的参数.但是,此实现强制缓存应用大量逻辑来计算图像.它必须检查GrayKey是否请求旋转的图像并采取相应的行动.我想以更优雅的方式"编码"这个图像计算关系,但似乎找不到.

有什么建议?

非常感谢.

c++ class-design

5
推荐指数
1
解决办法
1213
查看次数

Android UI设计

我想要一些资源来学习如何为Android设计?

我们需要具备哪些尺寸?

我们可以有自定义对话框和警报框设计吗?

你能指导我一些资源,如文章或书籍等.

user-interface android

5
推荐指数
3
解决办法
4525
查看次数

.NET中OutOfMemoryException的try/catch块的设计模式

我有一个适用于大量数据的应用程序,我想,可能是,有时候OutOfMemoryException会被抛出(半年来,我没有一个例外,但我只是想知道所有这些).正如我所调查的那样,在此异常之后,我无法继续执行我的程序.

是否有任何好的模式来处理这些异常,尤其是使用IDisposable类?

.net idisposable try-catch out-of-memory

5
推荐指数
1
解决办法
892
查看次数

单元测试 - 当你的代码几乎只是一个计算(例如GetHashCode)时,你会怎么做?

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)

c# unit-testing assert gethashcode

4
推荐指数
1
解决办法
1276
查看次数

C++ - 在不引入紧耦合的情况下识别一族多态类

假设我有一个名为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)

c++ polymorphism decoupling

2
推荐指数
1
解决办法
445
查看次数

在调用例程之后和之前在哪里评估不变量?

在契约式设计中,类不变量必须在两种情况下满足:创建对象之后和调用例程之后。是否有任何示例或条件,我也必须在调用例程之前进行评估?

.net eiffel invariants code-contracts

2
推荐指数
1
解决办法
151
查看次数

检查派生类类型

这是我在设计界面时遇到的问题的一个例子.

我有一个动物类,我从中获得了猫,狗和狮子.现在我有一个函数'feedFood',它接受基类Animal作为参数.根据动物的类型,我应该给动物喂食不同的食物.

那么如何在'feedFood'功能中检查动物的类型.

我能想到3种方法

  • 在基类中添加'AnimalType'枚举,该类在派生类中设置为正确的类型.
  • 在基类中添加虚函数以返回具有动物类型的字符串.在派生类中,返回动物名称的正确字符串.
  • 使用typeid或dynamic_cast检查'feedFood'函数中派生类的类型.

哪种方法最好,还是有其他更好的方法?

c++ derived-class

1
推荐指数
1
解决办法
3314
查看次数