标签: application-design

在我的C#代码中使用.NET 4.0元组是一个糟糕的设计决策吗?

随着.net 4 中的Tuple类的增加,我一直试图决定在我的设计中使用它们是否是一个糟糕的选择.我看到它的方式,一个元组可以是编写结果类的快捷方式(我相信还有其他用途).

所以这:

public class ResultType
{
    public string StringValue { get; set; }
    public int IntValue { get; set; }
}

public ResultType GetAClassedValue()
{
    //..Do Some Stuff
    ResultType result = new ResultType { StringValue = "A String", IntValue = 2 };
    return result;
}
Run Code Online (Sandbox Code Playgroud)

相当于:

public Tuple<string, int> GetATupledValue()
{
    //...Do Some stuff
    Tuple<string, int> result = new Tuple<string, int>("A String", 2);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

因此,抛开我错过了元组点的可能性,是一个Tuple设计选择不好的例子吗?对我来说,它似乎不那么混乱,但不像自我记录和干净.这意味着对于类型ResultType,后面很清楚类的每个部分意味着什么,但你有额外的代码来维护.随着Tuple<string, int>您将需要查找并弄清每一个 …

.net c# tuples application-design

166
推荐指数
7
解决办法
4万
查看次数

Hibernate延迟加载应用程序设计

我倾向于将HibernateSpring框架结合使用,并使用声明式事务划分功能(例如@Transactional).

众所周知,hibernate试图尽可能地非侵入性透明性,但是这在使用关系时证明更具挑战性lazy-loaded.


我看到了许多具有不同透明度的设计方案.

  1. 使关系不是懒惰的(例如, fetchType=FetchType.EAGER)
    • 这违反了延迟加载的整个想法..
  2. 使用初始化集合 Hibernate.initialize(proxyObj);
    • 这意味着与DAO的相对高耦合
    • 虽然我们可以定义一个接口initialize,但是其他实现并不能保证提供任何等价物.
  3. 将事务行为添加到持久Model对象本身(使用动态代理@Transactional)
    • 我没有尝试过动态代理方法,尽管我似乎从来没有让@Transactional处理持久对象本身.可能是因为hibernate是在代理上运行的.
    • 交易实际发生时失去控制权
  4. 提供惰性/非惰性API,例如loadData()loadDataWithDeps()
    • 强制应用程序知道何时使用哪个例程,再次紧耦合
    • 方法溢出loadDataWithA(),....,loadDataWithX()
  5. 强制查找依赖关系,例如,仅通过提供byId()操作
    • 需要很多非面向对象的例程,例如,findZzzById(zid)然后getYyyIds(zid)而不是z.getY()
    • 如果事务之间存在大量处理开销,则逐个获取集合中的每个对象可能很有用.
  6. 创建@Transactional 应用程序的一部分,而不仅仅是DAO
    • 嵌套事务的可能考虑因素
    • 需要适用于事务管理的例程(例如,足够小)
    • 虽然可能导致大量交易,但程序性影响较小
  7. 为DAO提供动态提取配置文件,例如,loadData(id, fetchProfile);
    • 应用程序必须知道何时使用哪个配置文件
  8. AoP类型的事务,例如,拦截操作并在必要时执行事务
    • 需要字节码操作或代理使用
    • 执行交易时失去控制权
    • 黑魔法,一如既往:)

我错过了任何选择吗?


在尝试最小化lazy-loaded应用程序设计中关系的影响时,哪种方法是您首选的方法?

(哦,对不起WoT)

java spring hibernate lazy-loading application-design

86
推荐指数
2
解决办法
2万
查看次数

什么是最好的"忘记密码"方法?

可能重复:
忘记密码:实现忘记密码功能的最佳方法是什么?

我正在编写一个社区网站.

我想构建一个"忘记密码"功能.

环顾不同的网站,我发现他们使用以下三个选项之一:

  1. 向用户发送一封电子邮件,其中包含指向唯一隐藏网址的链接,该网址允许他更改密码(Gmail和亚马逊)

  2. 向用户发送一封包含新的随机生成密码的电子邮件(Wordpress)

  3. 向用户发送他当前的密码(www.teach12.com)

选项#3似乎对用户来说最方便,但由于我将密码保存为MD5哈希,我不知道选项#3是如何可用的,因为MD5是不可逆的.这似乎也是一种不安全的选择,因为它意味着网站必须在某处以明文形式保存密码,并且至少明文密码是通过不安全的电子邮件发送给用户的.或者我在这里遗漏了什么?

因此,如果我不能做选项#1,选项#2似乎是最简单的编程,因为我只需要更改用户的密码并将其发送给他.虽然这有点不安全,因为您必须通过不安全的电子邮件传递实时密码.然而,这也可能被麻烦制造者误用,通过输入随机电子邮件和不断更改各种用户的密码来纠缠用户.

选项#1似乎是最安全的,但需要一些额外的编程来处理过期的隐藏URL等,但它似乎是大型网站使用的.

你有什么经验使用/编程这些不同的选项?有没有我错过的选择?

security md5 application-design forgot-password

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

如何设计Java应用程序?

在设计Java应用程序[J2EE应用程序的简单控制台应用程序]时,要记住哪些一般准则和最佳实践?

你好

我最近完成了Sun的Java编程教程并练习了核心java(我之前有编程经验).现在我理解了继承,抽象,多态,封装的基础知识

现在我正在编写Java代码没有太大困难,但我不确定应用程序设计.这是我的主要问题:"设计"应用程序.假设我已经完成了用Java创建应用程序的任务,我该怎么做?怎么想?在开发类层次结构时我应遵循的任何正式/非正式指南?我真的很困惑(抽象类或接口或子类......?).在编写代码之前,我应该从模型开始吗?

对于像我这样的人来说,拥有一套通用指南/最佳实践非常有用,我们可以在开始开发新的Java应用程序时遵循这些指南.

请提供一些我应该阅读或使用的指南/想法/书籍/资源/工具

在此先感谢斯科特

java application-design

23
推荐指数
2
解决办法
4万
查看次数

Spring和Guice在一起,或者只是Spring

我从头开始创建一个新的Java Web应用程序.

我对Spring Framework没有太多经验,但我知道我想使用它的一些功能,比如Transaccions Management.

另一方面,我非常喜欢Guice的依赖注入.

我知道Guice和Spring可以一起工作:http://www.jroller.com/mindcrime/entry/an_example_of_integrating_guice

但在开始设计我的应用程序之前,我想知道是否有人通过遵循该方法遇到了问题.

另外,我真正喜欢Guice的是你不需要XML配置文件,而只需要java模块,它更短,更容易阅读.Spring上有没有XML配置文件的替代品,类似于Guice?

java spring guice application-design web-application-design

21
推荐指数
3
解决办法
1万
查看次数

你如何进行单元测试?编译器标志?静态库?

我刚刚开始使用TDD,并且很好奇其他人采取什么方法来运行他们的测试.作为参考,我使用谷歌测试框架,但我相信这个问题适用于大多数其他测试框架和C/C++以外的语言.

到目前为止,我的一般方法是做三件事之一:

  1. 将大部分应用程序写入静态库,然后创建两个可执行文件.一个可执行文件是应用程序本身,而另一个是具有所有测试的测试运行器.两者都链接到静态库.

  2. 将测试代码直接嵌入到应用程序本身中,并使用编译器标志启用或禁用测试代码.这可能是我迄今为止使用过的最好的方法,但是稍微混乱了代码.

  3. 将测试代码直接嵌入到应用程序本身中,并且在给定某些命令行开关的情况下,运行应用程序本身或运行应用程序中嵌入的测试.

这些解决方案都不是特别优雅 ......

你是怎么做到的?

c++ tdd unit-testing application-design

14
推荐指数
2
解决办法
2276
查看次数

Android客户端应用程序中"数据层"的最佳实践

这是一个设计/最佳实践问题..

我是Android开发的新手,基本上是Web /移动解决方案的新手.

所以,我的问题是 - 在组织从远程服务器获取数据的android应用程序结构时,最佳做法是什么?

应该请求服务器进入一个与服务器进行通信的类(获取和发布请求),还是应该将我的请求看作数据源,这意味着每个数据类都为自己管理它?

或者我应该有更多抽象级别 - 一个级别用于获取数据,另一个级别用于使用某些接口但不知道源数据来自哪个?

我很好奇Android开发人员如何处理这些设计问题......

android design-patterns data-access-layer remote-access application-design

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

DTO模式是否已弃用?

在一个完整的Java EE应用程序中,群集是DTO模式仍然是一个有效的选项?有问题的应用程序使用EJB Hibernate和Struts with Spring等.在这种情况下传输域对象有什么问题吗?

编辑:只是为了澄清我的问题,现代资源和Java EE的改进有没有理由不使用域对象?如果没有,那么DTO模式是否会逐渐消失,不应该在新的应用程序中使用?

java design-patterns application-design java-ee

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

具体来说,属于模型,视图和控制器?

我一直在学习模型 - 视图 - 控制器范例("MVC"),但我很困惑,因为一些教程与其他教程相矛盾.

我目前对这个过程的理解看起来像这样:

路由器/调度员/前端控制器:

  • 虽然在"MVC"名称中没有特别引用,但路由器仍然是一个非常重要的部分.在这里,请求从原始URL转换为特定控制器.例如, www.StackUnderflow.com/question/123的请求路由到应用程序的"问题"控制器.

模型:

  • 这是从某些存储源(如数据库或XML文件)收集原始数据的位置.该模型用作抽象层,将Controller对特定数据请求转换为(例如)SQL查询,并将查询结果转换为标准格式(如数据对象).

  • 例如,在上面描述的/ browse/all场景中:

    • "问题"控制器将要求示范 "请给数据的问题123".
    • 然后,模型将其转换为"SELECT*FROM Questions WHERE Id = 123;" 并把它放到数据库中
    • 数据库将向模型返回"问题" 记录.
    • 模型将记录,并将其转换为问题数据对象
    • 模型然后要求做同样的事情"SELECT*FROM Answers WHERE QuestionID = 123;" 并从结果集中创建一个Answer对象数组,并将其添加到Question对象的answers成员变量中.
    • 模型将问题的对象返回到"问题"控制器.

控制器:

  • 这是该应用程序的真正主力.除了在模型视图中来回传递消息之外,Controller还负责授权等事务和应用程序/"业务"逻辑编辑:每个答案,业务逻辑属于模型.

  • 在正在进行的示例中,Controller将负责:

    • 确保用户已登录.
    • 从URL确定QuestionId.
    • 确定要使用的视图.
    • 发送HTTP代码并根据需要重定向.
    • 模型请求数据,并将所需数据存储在成员变量中.

视图:

  • 总的来说,View是应用程序中最简单的部分.它主要包含HTML模板的基本应用程序.这些模板将具有占位符,以便从Controller的成员变量中将数据插入到模板中:

例如

<html>

  <head>
    <title>
      <?php $question->getTitle() ?>
    </title>
  </head> …
Run Code Online (Sandbox Code Playgroud)

model-view-controller design-patterns application-design

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

应该将用户的帐户余额存储在数据库中还是动态计算?

用户的帐户余额是应该存储在数据库中还是动态计算?

为了获得准确的结果,计算它是动态有意义的,但是当有很多用户并且数据库变得非常大时,它可能是一个问题?

交易

  • Id(PK)
  • 帐户ID
  • 类型
  • 约会时间
  • etc..etc ...

账户余额

  • TransactionId(PK/FK)
  • 余额

c# architecture database-design application-design

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