我处于开发数据库驱动系统的早期阶段,系统的最大部分围绕着继承类型的关系.有一个包含大约10列的父实体,并且将有大约10个从父级继承的子实体.每个子实体将有大约10列.我认为为父实体提供自己的表并为每个子项提供自己的表 - 每个子类的表结构是有意义的.
今天,我的用户要求查看我创建的系统的结构.他们对每子类表结构的想法犹豫不决.他们更喜欢一个大~100列表,因为它们更容易执行自己的自定义查询.
为了用户的缘故,我应该考虑对数据库进行非规范化吗?
database database-design denormalization database-normalization
我对Windows Azure的了解仅限于我在微软网站上观看的几个视频.除了一些新的流行语,我还没有看到这个平台如何与已存在多年的传统网络主机区分开来.除了独特的计费模式(例如"每月存储交易")之外,Azure 在实际服务方面与传统网络主机(例如discountasp.net)有何区别?
拿这个界面:
interface ILogger
{
void Store(string payload);
}
Run Code Online (Sandbox Code Playgroud)
而这个类的实现ILogger
:
class Logger : ILogger
{
void Store(string payload, bool swallowException = true)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我希望编译器能够识别swallowException
为可选参数,从而满足接口的要求.相反,会发生什么是编译器抱怨Logger
不实现接口成员Store
.
我尝试的另一个有趣的事情是明确地实现接口,如下所示:
class Logger : ILogger
{
void ILogger.Store(string payload, bool swallowException = true)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
编译器发出警告"为参数'swallowException指定的默认值'将不起作用,因为它适用于在不允许可选参数的上下文中使用的成员." 它似乎暗示可选参数在某种程度上与显式接口定义不兼容,但为什么呢?
我可以通过Store
使用两个单独的函数定义(在存在可选参数之前执行操作的方式)重载来解决此问题.但是我喜欢它们语法清晰度的可选参数,并且希望这只是按照我期望的方式工作.
我知道可能有一个合理的(历史的或其他的)解释为什么会这样,但我似乎无法弄明白.
在C#语言规范定义了空语句文法生产,这让我做这样的事情:
static void Main(string[] args)
{
; ; ;
}
Run Code Online (Sandbox Code Playgroud)
为什么Microsoft会在C#语言中包含这种语法生成?它有用吗?
按引用类型的值实现赋值的正确方法是什么?我想执行一项任务,但不更改参考.
这就是我在说的:
void Main()
{
A a1 = new A(1);
A a2 = new A(2);
a1 = a2; //WRONG: Changes reference
a1.ValueAssign(a2); //This works, but is it the best way?
}
class A
{
int i;
public A(int i)
{
this.i = i;
}
public void ValueAssign(A a)
{
this.i = a.i;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该使用某种惯例吗?我觉得我不是第一个遇到这种情况的人.谢谢.
编辑:
哇.我想我需要针对我面临的实际问题更多地调整我的问题.我得到了很多答案,不符合不改变参考的要求.克隆不是问题所在.问题在于分配克隆.
我有许多依赖于A的类 - 它们都共享对A类相同对象的引用.因此,每当一个类改变A时,它就反映在其他类中,对吧?这一切都很好,直到其中一个类试图这样做:
myA = new A();
Run Code Online (Sandbox Code Playgroud)
实际上我不是在做,new A()
但我实际上正在从硬盘驱动器中检索A的序列化版本.但无论如何,这样做会导致myA收到新的参考.它不再与依赖于A的其他类共享相同的A.这是我试图解决的问题.我希望所有具有A实例的类都受上面代码行的影响.
我希望这能澄清我的问题.谢谢.
打印BitmapImage的最佳方法是什么?我来自System.Drawing的背景,所以我正在考虑将其转换为Bitmap然后打印它,但我认为可能有更好的方法.
谢谢!
如何在ASP.NET Web应用程序中创建.cshtml页面?使用MVC时,选择Razor的选项很明显 - 添加视图时会出现.但我似乎无法弄清楚如何在一个普通的ASP.NET Web应用程序中实现这一点.它甚至可能吗?
我目前正与我的同事讨论如何设计一个将由我的部门使用的API.具体来说,我的任务是编写一个API,作为访问Active Directory信息的包装 外观 - 根据我公司/部门的需求量身定制.我知道开源封装 外墙已经存在,但这不是这个问题的症结所在,仅仅是用来作为一个例子.
当我向我的团队提交我的设计方案时,他们让我失望,因为API不够"可配置".他们声称他们不希望API在"电话号码"和<隐藏电话号码的Active Directory表示>之间建立链接.会议中的每个人(除了我)都同意他们更愿意四处询问"Active Directory中用于用户电话号码的正确字段是什么?",并将其插入各自的应用程序(LOL!).
他们问我,"如果我们公司决定使用不同的字段的电话号码,你不在身边尽在改变你的源代码吗?" 他们最终承认他们害怕改变其他人的源代码,即使代码是原始的并且进行了大量的单元测试.我所在部门的每个高级IT人员都同意这一点.
在设计软件时,这真的是正确的态度吗?!
我即将开始研究针对内部客户的ClickOnce应用程序,以便在组织的Intranet上使用.我想简化设置过程,所以我认为开发部分信任的应用程序是个好主意,但现在我不太确定.
用户特别要求的一件事是(归结为)a TextBox
与Cue Text.目前提供此功能的最简单方法是使用一个简单的子类,TextBox
其中包含CueText功能作为属性.cuetext功能是通过PInvoke'd调用完成的SendMessage()
.
protected override void OnHandleCreated(EventArgs e)
{
this.UpdateCueText(); // Bang, you're dead here
base.OnHandleCreated(e);
}
private void UpdateCueText()
{
if (this.IsHandleCreated)
{
NativeMethods.SendMessage(new HandleRef(this, this.Handle), setCueBannerMessage, this.showCueTextWithFocus ? new IntPtr(1) : IntPtr.Zero, this.cueText);
}
}
Run Code Online (Sandbox Code Playgroud)
"啊哈!我需要SecurityPermission.UnmanagedCode
." 默认的Intranet区域安全性包括SecurityPermission
我可以告诉的权限,所以我尝试运行它,它会在调用时爆炸UpdateCueText()
.我甚至可以检查SecurityException
b/c 上的属性,每次尝试评估一个SecurityException
属性都会引发另一个无法察觉的属性SecurityException
.
我尝试标准修改:
protected override void OnHandleCreated(EventArgs e)
{
var permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
permission.Assert();
try
{
this.UpdateCue();
}
finally
{
CodeAccessPermission.RevertAssert();
}
base.OnHandleCreated(e); …
Run Code Online (Sandbox Code Playgroud)