java - 如何处理 <select> HTML 过滤器中的空值?

标签 java model-view-controller design-patterns anti-patterns

我有一个打印用户的用户界面,但我不想按国家/地区进行过滤。 我做了一个经典<select />元素。

在 JSP 中我有

<select id="country" onchange="return filter();">
    <option value="">...</option>
    <c:forEach var="country" items="${countries}">
        <option value="${country.id}"
            ${country.name}
        </option>
    </c:forEach>
</select>

问题是有些用户没有国家/地区,所以我需要处理 2 个过滤器: - 打印所有用户信息,无过滤器 - 只打印没有国家/地区的用户

所以我想知道对 Java 说的最好方式是什么:“找到我所有用户”和“找到我所有没有国家/地区的用户”。

我有一些想法:如果countryId = 0,服务器将其翻译为“没有国家/地区的用户”,如果countryId = null,服务器将其翻译为“所有用户”。

最后,DAO 对象将进行如下查询

public List<User> findByCountry(Integer countryId){

   query = "select * from users"
   if(countryId==0){
      query+= " where country_id is null"
   }
   else if(countryId==null){
      query += " where country_id = " + countryId;
   }
   return query results...
}

那么这可以吗,还是很难看,或者有人有更好的模式来做到这一点?

最佳答案

我实际上会想出两个 DAO API:

public ... findAllUsers(...) {...}

public ... findAllUsersWithoutACountry(...) {...} 

在我看来,你的方法的问题在于,由于动态 SQL 代码,你的 API 并不明确。这会让你的同事更难理解你的代码。其次,这是两个不同的任务,虽然它们很相似,但最好提出两种明确的方法。这更容易进行单元测试,并且圈复杂度更低,因为方法中的控制流更少。此外,代码更容易理解,因为其他开发人员不需要想知道为什么您要针对 0 或 null 测试countryId,这不会向他们传达大量有意义的消息,除了它只是解决您当前问题的快速技巧之外。三周后,您会想知道为什么自己要针对这些奇怪的值进行测试。 :)

关于java - 如何处理 <select> HTML 过滤器中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141103/

相关文章:

Java - 处理外来字符

java - Spring HTTP 文件上传 : Validation of File Size

model-view-controller - 异常处理 - 有更好的方法吗?

asp.net-mvc - 如何在不使用太多 RAM 的情况下正确地从 MVC3 传输大数据?

以子类为参数类型的Scala覆盖方法

java - SpringBoot2.X中如何解决CORS问题

php - Twig 循环空结果

design-patterns - 使用多个提供程序的客户端应用程序应使用哪种设计/模式?

ViewController 的快速可重用性

java - 写信给数字电话号码 Java