首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通用同步设计

通用同步设计
EN

Stack Overflow用户
提问于 2013-10-21 04:30:46
回答 1查看 83关注 0票数 1

我们正在使用双向json请求和this algorithm构建一些同步功能。一切顺利,我们让它在原型模式下运行。现在我正在尝试泛化代码,因为我们将同步应用程序中的几个表。如果能够将类定义为"extends“,并获得附加属性和同步处理方法,只需几个专门化/重写,那就太酷了。我已经走了这么远:

代码语言:javascript
复制
abstract class Synchable [T<:Synchable[T]] (val ruid: String, val lastSyncTime: String, val isDeleted:Int) {
  def contentEquals(Target: T): Boolean
  def updateWith(target: T) 
  def insert
  def selectSince(clientLastSyncTime: String): List[T]
  def findByRuid(ruid: String): Option[T]

  implicit val validator: Reads[T]

  def process(clientLastSyncTime: String, updateRowList: List[JsObject]) = {
    for (syncRow <- updateRowList) {
      val validatedSyncRow = syncRow.validate[Synchable]
      validatedSyncRow.fold(
        valid = { result => // valid row
          findByRuid(result.ruid) match { //- do we know about it?
            case Some(knownRow) => knownRow.updateWith(result)
            case None => result.insert
          }
        }... invalid, etc

我是Scala的新手,我知道我可能错过了一些东西- WIP!

如能就这一办法提出任何建议或建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-22 05:47:09

一些快速的:

您传入的那些_参数,然后立即分配给vals:为什么不一击就这么做呢?例如:

代码语言:javascript
复制
abstract class Synchable( val ruid: String = "", val lastSyncTime: String = "",  val isDeleted: Int = 0) {

这为你节省了一条线,而且意图也更加清晰,我想。

我不确定你把字符串默认为"“--除非有一个很好的理由(而且经常是这样),我认为使用像ruid:Option[String] = None这样的东西更明确,可以让你做各种简单的事情,比如foldmapflatMap等等。

否则看起来很酷--你可能想做的其他事情就是用一点this.type魔法来加强打字,这样你就可以在编译时防止错误的使用。对于当前的抽象类,没有什么可以阻止我:

代码语言:javascript
复制
class SynchableCat extends Synchable { ... }
class SynchableDog extends Synchable { ... }

val cat = new SynchableCat
val dog = new SynchableDog

cat.updateWith(dog) // This won't end well

但是,如果您只是将抽象的方法签名更改为如下所示:

代码语言:javascript
复制
def updateWith(target: this.type)

然后,更改会在子类中向下扩展,缩小类型,如果我尝试以上的更新操作,编译器将省略一个(相对明确的)错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19486289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档